"""Gruppen-Verwaltung in Einstellungen."""

from fastapi import APIRouter, Depends, Form, Request
from fastapi.responses import HTMLResponse, RedirectResponse
from fastapi.templating import Jinja2Templates
from sqlalchemy.orm import Session

from dependencies import get_current_user, get_db
from models.gruppe import Gruppe, KontaktGruppe

router = APIRouter(prefix="/einstellungen/gruppen")
templates = Jinja2Templates(directory="templates")


@router.get("", response_class=HTMLResponse)
async def liste(request: Request, user=Depends(get_current_user), db: Session = Depends(get_db)):
    gruppen = db.query(Gruppe).order_by(Gruppe.name).all()
    return templates.TemplateResponse("pages/einstellungen/gruppen.html", {
        "request": request,
        "user": user,
        "active_page": "einstellungen",
        "gruppen": gruppen,
    })


@router.post("/neu")
async def erstellen(
    kuerzel: str = Form(...),
    name: str = Form(...),
    farbe: str = Form("#607D8B"),
    user=Depends(get_current_user),
    db: Session = Depends(get_db),
):
    kuerzel = kuerzel.strip().upper()
    name = name.strip()
    if not kuerzel or not name:
        return RedirectResponse(url="/einstellungen/gruppen", status_code=303)

    existing = db.query(Gruppe).filter(Gruppe.kuerzel == kuerzel).first()
    if not existing:
        db.add(Gruppe(kuerzel=kuerzel, name=name, farbe=farbe.strip() or "#607D8B"))
        db.commit()
    return RedirectResponse(url="/einstellungen/gruppen", status_code=303)


@router.post("/{gruppe_id}/bearbeiten")
async def bearbeiten(
    gruppe_id: int,
    name: str = Form(...),
    farbe: str = Form("#607D8B"),
    user=Depends(get_current_user),
    db: Session = Depends(get_db),
):
    gruppe = db.query(Gruppe).filter(Gruppe.id == gruppe_id).first()
    if gruppe and name.strip():
        gruppe.name = name.strip()
        gruppe.farbe = farbe.strip() or "#607D8B"
        db.commit()
    return RedirectResponse(url="/einstellungen/gruppen", status_code=303)


@router.post("/{gruppe_id}/loeschen")
async def loeschen(
    gruppe_id: int,
    user=Depends(get_current_user),
    db: Session = Depends(get_db),
):
    gruppe = db.query(Gruppe).filter(Gruppe.id == gruppe_id).first()
    if gruppe:
        db.delete(gruppe)
        db.commit()
    return RedirectResponse(url="/einstellungen/gruppen", status_code=303)
