"""Map external platform routes to existing app modules.

This router keeps app resolution outside ``/apps`` so the existing applications
do not need tenant-awareness or gateway-specific code.
"""

from __future__ import annotations

from dataclasses import dataclass


@dataclass(frozen=True, slots=True)
class AppRoute:
    """A platform route entry for an existing app."""

    app_id: str
    import_path: str
    url_prefix: str
    description: str = ""


class AppRouter:
    """Route ``/api/v1/{app}/{action}`` requests to registered app modules."""

    def __init__(self) -> None:
        self.routes: dict[str, AppRoute] = {
            "wp_invoices": AppRoute("wp_invoices", "apps.wp_invoices", "/api/v1/wp_invoices"),
            "wp_invoices_mail_app": AppRoute("wp_invoices_mail_app", "apps.wp_invoices_mail_app", "/api/v1/wp_invoices_mail_app"),
            "aroflo_connector_app": AppRoute("aroflo_connector_app", "apps.aroflo_connector_app", "/api/v1/aroflo_connector_app"),
            "leave_form_app": AppRoute("leave_form_app", "apps.leave_form_app", "/api/v1/leave_form_app"),
            "abn_lookup_app": AppRoute("abn_lookup_app", "apps.abn_lookup_app", "/api/v1/abn_lookup_app"),
            "voiceordering_app": AppRoute("voiceordering_app", "apps.voiceordering_app", "/api/v1/voiceordering_app"),
        }

    def resolve_app_id(self, path: str) -> str | None:
        parts = [part for part in (path or "").split("/") if part]
        if len(parts) >= 3 and parts[0] == "api" and parts[1] == "v1":
            return parts[2]
        return None

    def get_route(self, app_id: str) -> AppRoute | None:
        return self.routes.get(app_id)

