from __future__ import annotations

from copy import deepcopy
from .spec_models import SolutionSpec


def normalize_solution_spec(spec: SolutionSpec) -> SolutionSpec:
    payload = deepcopy(spec.model_dump())
    payload["package"]["name"] = payload["package"].get("name") or spec.solution_name
    payload["preferences"]["multi_app"] = len(spec.entities) > 1 if spec.preferences.multi_app is None else spec.preferences.multi_app
    if spec.portal.enabled and spec.portal.sections:
        payload["portal"]["name"] = payload["portal"].get("name") or f"{spec.solution_name} 首页"

    normalized_entities: list[dict[str, object]] = []
    for ordinal, entity in enumerate(spec.entities, start=1):
        entity_payload = deepcopy(entity.model_dump())
        entity_payload["ordinal"] = entity_payload.get("ordinal") or ordinal
        normalized_entities.append(entity_payload)
    payload["entities"] = normalized_entities

    if spec.navigation.enabled and not spec.navigation.items:
        payload["navigation"]["enabled"] = False
    return SolutionSpec.model_validate(payload)
