"""Market indicator endpoints (Issue #99) — ARN-framework for primary market.

POST /api/v1/market/ddu-indicator — per-quarter price indicator of the PRIMARY
market (новостройки/ДДУ) for Свердловская обл., ARN-mirror request/response.
"""

from __future__ import annotations

from typing import Annotated

from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session

from app.core.db import get_db
from app.schemas.market import DduIndicatorRequest, DduIndicatorResponse
from app.services.analytics import ddu_price_indicator as ddu

router = APIRouter()


@router.post("/ddu-indicator", response_model=DduIndicatorResponse)
def ddu_indicator(
    payload: DduIndicatorRequest,
    db: Annotated[Session, Depends(get_db)],
) -> DduIndicatorResponse:
    """ARN-style ценовой индикатор первичного рынка (ДДУ) по кварталам × площади.

    Принимает то же body, что ARN/НСПД (camelCase). MVP: period_type=Q,
    calc methods 1 (базисный) / 2 (предыдущий), субъект 66. Неподдержанные
    ARN-опции (M/H/Y, method=3, иные субъекты, cad_quarter) не отвергаются —
    отражаются в `notes`. Источник: mv_ddu_price_indicator (migration 152).

    Killer-USP: «у нас первичка, у НСПД вторичка» — обе нужны девелоперу.
    """
    result = ddu.get_ddu_indicator(
        db,
        calculation_method=payload.calculation_method,
        period_from=payload.period_from,
        period_to=payload.period_to,
        area_ranges=payload.area_ranges,
        federal_subject=payload.federal_subject,
        indicators=payload.indicators,
    )
    # cadastral_quarter is shape-compat only; flag it if the client sent one.
    if payload.cadastral_quarter:
        result["notes"].append(
            "cadastralQuarter не поддержан: первичка (ДДУ) слишком разрежена "
            "на уровне кад.квартала — индикатор считается по субъекту (66)."
        )
    return DduIndicatorResponse(**result)
