from __future__ import annotations

from typing import Any

from ..spec_models import EntitySpec, ViewType
from .form_compiler import default_member_auth


VIEW_TYPE_MAP = {
    ViewType.table: "tableView",
    ViewType.card: "cardView",
    ViewType.board: "boardView",
    ViewType.gantt: "ganttView",
    ViewType.hierarchy: "hierarchyView",
}


def compile_views(entity: EntitySpec) -> list[dict[str, Any]]:
    views: list[dict[str, Any]] = []
    for ordinal, view in enumerate(entity.views, start=1):
        views.append(
            {
                "view_id": view.view_id,
                "name": view.name,
                "type": view.type.value,
                "create_payload": {
                    "appKey": "__APP_KEY__",
                    "viewgraphName": view.name,
                    "viewgraphType": VIEW_TYPE_MAP[view.type],
                    "auth": default_member_auth(),
                    "beingPinNavigate": True,
                    "viewgraphQueIds": list(view.field_ids),
                    "viewgraphQuestions": [],
                    "ordinal": ordinal,
                    "beingShowTitleQue": view.type in (ViewType.card, ViewType.board, ViewType.gantt, ViewType.hierarchy),
                    "beingShowCover": False,
                    "viewgraphLimitType": 1,
                    "viewgraphLimit": view.filters,
                    "sortType": "defaultSort",
                    "viewgraphSorts": view.sort,
                    **view.config,
                },
                "column_widths": view.column_widths,
                "member_config": view.member_config,
                "apply_config": view.apply_config,
                "group_by_field_id": view.group_by_field_id,
                "config": view.config,
                "being_default": view.being_default,
            }
        )
    return views
