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.gruppe import Gruppe
from models.tag import Tag, TagKategorie
from services import search_service

router = APIRouter(prefix="/suche")
templates = Jinja2Templates(directory="templates")


@router.get("/live", response_class=HTMLResponse)
async def live_suche(request: Request, q: str = "", user=Depends(get_current_user), db: Session = Depends(get_db)):
    q = q.strip()
    ergebnisse = []
    if len(q) >= 2:
        ergebnisse = search_service.live_suche(db, q, limit=10)
    return templates.TemplateResponse("components/search_results.html", {
        "request": request,
        "ergebnisse": ergebnisse,
        "q": q,
    })


@router.get("", response_class=HTMLResponse)
async def ergebnisse(
    request: Request,
    q: str = "",
    typ: str = None,
    gruppe: int = None,
    tag: int = None,
    ort: str = None,
    user=Depends(get_current_user),
    db: Session = Depends(get_db),
):
    q = q.strip()
    ergebnisse = {"kontakt": [], "aktivitaet": [], "veranstaltung": [], "kampagne": []}
    if q:
        ergebnisse = search_service.volle_suche(
            db, q, entity_type=typ, limit=100,
            gruppe_id=gruppe, tag_id=tag, ort=ort,
        )

    gruppen = db.query(Gruppe).order_by(Gruppe.name).all()
    kategorien = db.query(TagKategorie).order_by(TagKategorie.sortierung).all()

    return templates.TemplateResponse("pages/suche/ergebnisse.html", {
        "request": request,
        "user": user,
        "active_page": "suche",
        "q": q,
        "typ_filter": typ,
        "gruppe_filter": gruppe,
        "tag_filter": tag,
        "ort_filter": ort,
        "ergebnisse": ergebnisse,
        "gruppen": gruppen,
        "kategorien": kategorien,
    })
