"""
Routes FastAPI pour les opérateurs
"""
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from pydantic import BaseModel
from typing import Optional
from datetime import datetime

from app.database import get_db
from app.models.operateur import Operateur, AbsenceOperateur

router = APIRouter(prefix="/api/operateurs", tags=["operateurs"])


class OperateurCreate(BaseModel):
    nom: str
    prenom: str
    poste: Optional[str] = None
    couleur: Optional[str] = "#4facfe"
    categorie: Optional[str] = "production"


class AbsenceCreate(BaseModel):
    operateur_id: int
    type: str  # conge, absence, formation
    date_debut: str
    date_fin: str
    commentaire: Optional[str] = None


@router.get("/")
def liste_operateurs(db: Session = Depends(get_db)):
    ops = db.query(Operateur).filter(Operateur.actif == 1).all()
    return [{"id": o.id, "nom": o.nom, "prenom": o.prenom, "poste": o.poste, "couleur": o.couleur, "categorie": o.categorie or "production"} for o in ops]


@router.post("/")
def creer_operateur(data: OperateurCreate, db: Session = Depends(get_db)):
    op = Operateur(
        nom=data.nom,
        prenom=data.prenom,
        poste=data.poste,
        couleur=data.couleur,
        date_creation=datetime.utcnow().isoformat()
    )
    db.add(op)
    db.commit()
    db.refresh(op)
    return op


@router.put("/{op_id}")
def modifier_operateur(op_id: int, data: OperateurCreate, db: Session = Depends(get_db)):
    op = db.query(Operateur).filter(Operateur.id == op_id).first()
    if not op:
        raise HTTPException(404, "Opérateur introuvable")
    op.nom = data.nom
    op.prenom = data.prenom
    op.poste = data.poste
    op.couleur = data.couleur
    op.categorie = data.categorie or "production"
    db.commit()
    return op


@router.delete("/{op_id}")
def supprimer_operateur(op_id: int, db: Session = Depends(get_db)):
    op = db.query(Operateur).filter(Operateur.id == op_id).first()
    if not op:
        raise HTTPException(404, "Opérateur introuvable")
    op.actif = 0
    db.commit()
    return {"ok": True}


@router.get("/{op_id}/absences")
def liste_absences(op_id: int, db: Session = Depends(get_db)):
    return db.query(AbsenceOperateur).filter(
        AbsenceOperateur.operateur_id == op_id
    ).all()


@router.get("/absences/all")
def toutes_absences(db: Session = Depends(get_db)):
    return db.query(AbsenceOperateur).all()


@router.post("/absences/")
def creer_absence(data: AbsenceCreate, db: Session = Depends(get_db)):
    absence = AbsenceOperateur(
        operateur_id=data.operateur_id,
        type=data.type,
        date_debut=data.date_debut,
        date_fin=data.date_fin,
        commentaire=data.commentaire
    )
    db.add(absence)
    db.commit()
    db.refresh(absence)
    return absence


@router.delete("/absences/{absence_id}")
def supprimer_absence(absence_id: int, db: Session = Depends(get_db)):
    absence = db.query(AbsenceOperateur).filter(AbsenceOperateur.id == absence_id).first()
    if not absence:
        raise HTTPException(404, "Absence introuvable")
    db.delete(absence)
    db.commit()
    return {"ok": True}