"""Generic public-create primitive plus canonical Forms runtime (7O).

Legacy: p2hs-forms.mjs (submitFormEntry) for composed entity records.
Canonical: p2hs-forms-runtime.mjs + installed /api/forms/:formKey/submissions.
Leave /api/contact adapters for already-generated apps.
"""
from __future__ import annotations

from pathlib import Path

_PAGES_TYPES = frozenset({"html", "react_app", "nuxt_app"})
ADAPTER_MARKER = "p2hs-forms"

def forms_adapter_files(project_type: str) -> dict[str, str]:
    if project_type not in _PAGES_TYPES:
        return {}
    root = Path(__file__).with_name("runtime")
    shared_entry = (root / "p2hs-forms.mjs").read_text(encoding="utf-8")
    runtime = (root / "p2hs-forms-runtime.mjs").read_text(encoding="utf-8")
    submit = (root / "p2hs-forms-submit.mjs").read_text(encoding="utf-8")
    pages = (root / "forms-submit-pages-fn.js").read_text(encoding="utf-8")
    files = {
        "functions/_lib/p2hs-forms.mjs": shared_entry,
        "functions/_lib/p2hs-forms-runtime.mjs": runtime,
        "functions/_lib/p2hs-forms-submit.mjs": submit,
        "functions/api/forms/[formKey]/submissions.js": pages,
        "functions/api/forms/[formKey]/files.js": (root / "forms-file-pages-fn.js").read_text(encoding="utf-8"),
    }
    if project_type == "nuxt_app":
        files["server/utils/p2hs-forms.mjs"] = shared_entry
        files["server/utils/p2hs-forms-runtime.mjs"] = runtime
        files["server/utils/p2hs-forms-submit.mjs"] = submit
        files["server/api/forms/[formKey]/submissions.post.ts"] = (
            root / "forms-submit-route.ts"
        ).read_text(encoding="utf-8")
        files["server/api/forms/[formKey]/files.post.ts"] = (
            root / "forms-file-route.ts"
        ).read_text(encoding="utf-8")
    return files


def retire_legacy_form_route_aliases(repo_path: str) -> list[str]:
    """Retire form files that normalize to the same route as the canonical adapter.

    Parameter spelling is not part of the route. The same rule covers every
    other capability through ``retire_colliding_application_routes``.
    """

    from src.domain.codegen.route_identity import retire_colliding_application_routes

    keep = {
        name
        for name in forms_adapter_files("nuxt_app")
        if name.startswith(("functions/api/", "server/api/"))
    }
    return retire_colliding_application_routes(repo_path, keep)
