"""AVM v2 ensemble router — residential property valuation."""

from fastapi import APIRouter

from app.models.avm_v2 import (
    AVMv2ModelInfo,
    AVMv2PredictRequest,
    AVMv2PredictResponse,
    AVMv2TrainRequest,
    AVMv2TrainResponse,
)
from app.services.avm_v2_service import avm_v2_service

router = APIRouter(prefix="/avm/v2", tags=["AVM v2 Ensemble"])


@router.post("/predict", response_model=AVMv2PredictResponse)
def predict_v2(req: AVMv2PredictRequest) -> AVMv2PredictResponse:
    """Predict residential property price using the multi-model ensemble.

    Ensemble: XGBoost (0.4) + LightGBM (0.35) + CatBoost (0.25).
    Falls back to heuristic when trained models are not available.
    """
    return avm_v2_service.predict(req)


@router.post("/train", response_model=AVMv2TrainResponse)
def train_v2(req: AVMv2TrainRequest) -> AVMv2TrainResponse:
    """Trigger model retraining with Optuna hyperparameter optimization.

    Requires training data pipeline (Phase 3). Currently returns scaffold.
    """
    return avm_v2_service.train(req)


@router.get("/model-info", response_model=AVMv2ModelInfo)
def model_info_v2() -> AVMv2ModelInfo:
    """Get current active ensemble model information."""
    return avm_v2_service.get_model_info()
