"""Phase 11D7F freeze: no second file identity, raw storage stays separate."""

from __future__ import annotations

from pathlib import Path

from src.domain.starter_library.catalog import known_contract_ids

REPO = Path(__file__).resolve().parents[1]
FORBIDDEN_IDENTITIES = (
    "application_file_id",
    "customer_file_id",
    "external_file_id",
    "remote_file_id",
)
SURFACES = [
    REPO / "src/domain/codegen/runtime/p2hs-app-client.js",
    REPO / "src/domain/codegen/runtime/p2hs-files.mjs",
    REPO / "src/domain/starter_library/catalog.py",
    REPO / "boilerplates/nuxt_app/components/starter/FileUpload.vue",
    REPO / "boilerplates/nuxt_app/components/starter/AttachmentList.vue",
    REPO / "boilerplates/react_app/src/components/starter/FileUpload.jsx",
    REPO / "boilerplates/react_app/src/components/starter/AttachmentList.jsx",
]


def test_canonical_file_identity_remains_file_id():
    blob = "\n".join(path.read_text(encoding="utf-8") for path in SURFACES)
    for term in FORBIDDEN_IDENTITIES:
        assert term not in blob, term
    assert "adapter.files" in known_contract_ids()
    assert "adapter.storage" in known_contract_ids()
    assert "file.upload" in known_contract_ids()


def test_generated_upload_does_not_choose_provider():
    client = (REPO / "src/domain/codegen/runtime/p2hs-app-client.js").read_text(encoding="utf-8")
    assert "uploadApplicationFile" in client
    assert "if project.storage" not in client
    assert "amazon_s3" not in client
    assert "cloudflare_r2" not in client
    forms = (REPO / "src/domain/codegen/forms_codegen.py").read_text(encoding="utf-8")
    assert "uploadApplicationFile" in forms
    assert "storage.file.*" in forms
