"""
Routes FastAPI pour les types de pièces béton
"""
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List

from app.database import get_db
from app.models.type_piece import TypePiece
from app.schemas.type_piece import TypePieceCreate, TypePieceUpdate, TypePieceResponse

router = APIRouter(prefix="/api/types-pieces", tags=["Types de pièces"])


@router.get("/", response_model=List[TypePieceResponse])
def get_types(db: Session = Depends(get_db)):
    return db.query(TypePiece).order_by(TypePiece.nom).all()


@router.post("/", response_model=TypePieceResponse)
def create_type(data: TypePieceCreate, db: Session = Depends(get_db)):
    existing = db.query(TypePiece).filter(TypePiece.nom == data.nom).first()
    if existing:
        raise HTTPException(status_code=400, detail="Ce type de pièce existe déjà")
    tp = TypePiece(**data.dict())
    db.add(tp)
    db.commit()
    db.refresh(tp)
    return tp


@router.put("/{id}", response_model=TypePieceResponse)
def update_type(id: int, data: TypePieceUpdate, db: Session = Depends(get_db)):
    tp = db.query(TypePiece).filter(TypePiece.id == id).first()
    if not tp:
        raise HTTPException(status_code=404, detail="Type introuvable")
    for k, v in data.dict(exclude_none=True).items():
        setattr(tp, k, v)
    db.commit()
    db.refresh(tp)
    return tp


@router.delete("/{id}")
def delete_type(id: int, db: Session = Depends(get_db)):
    tp = db.query(TypePiece).filter(TypePiece.id == id).first()
    if not tp:
        raise HTTPException(status_code=404, detail="Type introuvable")
    db.delete(tp)
    db.commit()
    return {"ok": True}
