"""Aufräumen - Datenpflege-Übersicht."""

from datetime import datetime

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

from dependencies import get_current_user, get_db
from models.kontakt import Kontakt

router = APIRouter()
templates = Jinja2Templates(directory="templates")


PAGE_SIZE = 50


@router.get("/aufraemen", response_class=HTMLResponse)
async def aufraemen(request: Request, seite: int = 1, user=Depends(get_current_user), db: Session = Depends(get_db)):
    gesamt = db.query(Kontakt).filter(Kontakt.ist_blacklisted == False).count()
    seiten_gesamt = max(1, (gesamt + PAGE_SIZE - 1) // PAGE_SIZE)
    seite = max(1, min(seite, seiten_gesamt))

    kontakte = (
        db.query(Kontakt)
        .filter(Kontakt.ist_blacklisted == False)
        .order_by(Kontakt.zuletzt_aufgeraeumt.asc().nullsfirst())
        .offset((seite - 1) * PAGE_SIZE)
        .limit(PAGE_SIZE)
        .all()
    )
    return templates.TemplateResponse("pages/aufraemen.html", {
        "request": request,
        "user": user,
        "active_page": "aufraemen",
        "kontakte": kontakte,
        "heute": datetime.now(),
        "seite": seite,
        "seiten_gesamt": seiten_gesamt,
        "gesamt": gesamt,
    })


@router.post("/kontakte/{kontakt_id}/aufgeraeumt", response_class=HTMLResponse)
async def als_aufgeraeumt_markieren(
    kontakt_id: int,
    request: Request,
    user=Depends(get_current_user),
    db: Session = Depends(get_db),
):
    k = db.query(Kontakt).filter(Kontakt.id == kontakt_id).first()
    if k:
        k.zuletzt_aufgeraeumt = datetime.now()
        db.commit()

    # Gibt leere Zeile zurück → HTMX entfernt den Eintrag aus der Liste
    return HTMLResponse(f"""<tr id="aufr-{kontakt_id}" style="opacity:0.4; transition: opacity 0.3s;">
        <td colspan="6" style="font-size:0.8rem; color: var(--kw-success); text-align:center;">
            ✓ Aufgeräumt — wird beim nächsten Laden ans Ende verschoben
        </td>
    </tr>""")
