from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from app.db.session import get_db
from app.services.asset_service import AssetService
from typing import List

router = APIRouter()

@router.get("/makes", response_model=List[str])
async def list_makes(db: AsyncSession = Depends(get_db)):
    """1. Szint: Márkák listázása."""
    return await AssetService.get_makes(db)

@router.get("/models", response_model=List[str])
async def list_models(make: str, db: AsyncSession = Depends(get_db)):
    """2. Szint: Típusok listázása egy adott márkához."""
    models = await AssetService.get_models(db, make)
    if not models:
        raise HTTPException(status_code=404, detail="Márka nem található vagy nincsenek típusok.")
    return models

@router.get("/generations", response_model=List[str])
async def list_generations(make: str, model: str, db: AsyncSession = Depends(get_db)):
    """3. Szint: Generációk/Évjáratok listázása."""
    generations = await AssetService.get_generations(db, make, model)
    if not generations:
        raise HTTPException(status_code=404, detail="Nincs generációs adat ehhez a típushoz.")
    return generations

@router.get("/engines")
async def list_engines(make: str, model: str, gen: str, db: AsyncSession = Depends(get_db)):
    """4. Szint: Motorváltozatok és technikai specifikációk."""
    engines = await AssetService.get_engines(db, make, model, gen)
    if not engines:
        raise HTTPException(status_code=404, detail="Nincs motorváltozat adat.")
    
    # Itt visszaküldjük a teljes katalógus objektumokat (ID, motorváltozat, specifikációk)
    return [
        {
            "id": e.id,
            "variant": e.engine_variant,
            "engine_code": e.engine_code,
            "fuel_type": e.fuel_type,
            "factory_data": e.factory_data
        } for e in engines
    ]