from __future__ import annotations

from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.ext.asyncio import AsyncSession

from src.core.database import get_db
from src.domain.admin.router import require_admin
from src.domain.auth.models import User
from src.domain.composition_recipes.service import CompositionRecipeService

router = APIRouter(prefix="/api/admin/composition-recipes", tags=["admin", "composition-recipes"])


@router.get("")
async def list_recipes(
    _: User = Depends(require_admin), db: AsyncSession = Depends(get_db)
):
    service = CompositionRecipeService(db)
    rows = await service.repo.list()
    items = []
    for row in rows:
        recipe = service.from_record(row)
        readiness = service.readiness(recipe)
        items.append({"recipe": recipe.model_dump(), "readiness": readiness.model_dump()})
    return {"items": items, "total": len(items)}


@router.get("/{slug}")
async def get_recipe(
    slug: str, _: User = Depends(require_admin), db: AsyncSession = Depends(get_db)
):
    service = CompositionRecipeService(db)
    recipe = await service.get(slug, active_only=False)
    if recipe is None:
        raise HTTPException(status_code=404, detail="Composition recipe not found")
    return {"recipe": recipe.model_dump(), "readiness": service.readiness(recipe).model_dump()}
