"""
Routes FastAPI pour les notifications MAESTRO
"""
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from typing import List

from app.database import get_db
from app.models.notification import Notification
from app.schemas.notification import NotificationCreate, NotificationOut

router = APIRouter(prefix="/api/notifications", tags=["notifications"])


@router.get("/", response_model=List[NotificationOut])
def get_notifications(db: Session = Depends(get_db)):
    return db.query(Notification)\
             .order_by(Notification.date_creation.desc())\
             .limit(50).all()


@router.get("/non-lues/count")
def count_non_lues(db: Session = Depends(get_db)):
    count = db.query(Notification)\
              .filter(Notification.lu == False)\
              .count()
    return {"count": count}


@router.post("/", response_model=NotificationOut)
def create_notification(notif: NotificationCreate, db: Session = Depends(get_db)):
    db_notif = Notification(**notif.dict())
    db.add(db_notif)
    db.commit()
    db.refresh(db_notif)
    return db_notif


@router.put("/{notif_id}/lire")
def marquer_lue(notif_id: int, db: Session = Depends(get_db)):
    notif = db.query(Notification).filter(Notification.id == notif_id).first()
    if notif:
        notif.lu = True
        db.commit()
    return {"ok": True}


@router.put("/lire-tout")
def marquer_tout_lu(db: Session = Depends(get_db)):
    db.query(Notification).filter(Notification.lu == False)\
      .update({"lu": True})
    db.commit()
    return {"ok": True}


@router.delete("/{notif_id}")
def supprimer_notification(notif_id: int, db: Session = Depends(get_db)):
    notif = db.query(Notification).filter(Notification.id == notif_id).first()
    if notif:
        db.delete(notif)
        db.commit()
    return {"ok": True}