"""
Routes FastAPI pour les événements de niveau
Réceptions armatures et livraisons chantier
"""
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List

from app.database import get_db
from app.models.evenement import EvenementNiveau
from app.schemas.evenement import EvenementCreate, EvenementUpdate, EvenementOut

router = APIRouter(prefix="/api/evenements", tags=["evenements"])


@router.get("/niveau/{niveau_id}", response_model=List[EvenementOut])
def get_evenements(niveau_id: int, db: Session = Depends(get_db)):
    return db.query(EvenementNiveau)\
             .filter(EvenementNiveau.niveau_id == niveau_id)\
             .order_by(EvenementNiveau.date)\
             .all()


@router.post("/", response_model=EvenementOut)
def create_evenement(ev: EvenementCreate, db: Session = Depends(get_db)):
    if ev.type not in ("reception_armatures", "livraison_chantier"):
        raise HTTPException(400, "Type invalide")
    db_ev = EvenementNiveau(**ev.dict())
    db.add(db_ev)
    db.commit()
    db.refresh(db_ev)
    return db_ev


@router.put("/{ev_id}", response_model=EvenementOut)
def update_evenement(ev_id: int, ev: EvenementUpdate, db: Session = Depends(get_db)):
    db_ev = db.query(EvenementNiveau).filter(EvenementNiveau.id == ev_id).first()
    if not db_ev:
        raise HTTPException(404, "Événement introuvable")
    for field, value in ev.dict(exclude_none=True).items():
        setattr(db_ev, field, value)
    db.commit()
    db.refresh(db_ev)
    return db_ev


@router.delete("/{ev_id}")
def delete_evenement(ev_id: int, db: Session = Depends(get_db)):
    db_ev = db.query(EvenementNiveau).filter(EvenementNiveau.id == ev_id).first()
    if not db_ev:
        raise HTTPException(404, "Événement introuvable")
    db.delete(db_ev)
    db.commit()
    return {"ok": True}