"""Pydantic response models for the API."""

from datetime import date, datetime
from pydantic import BaseModel


class ParteiOut(BaseModel):
    id: int
    kuerzel: str
    name: str | None = None
    farbe: str | None = None


class GremiumOut(BaseModel):
    id: int
    name: str
    kuerzel: str | None = None
    typ: str | None = None


class BeratungOut(BaseModel):
    id: int
    gremium: GremiumOut | None = None
    sitzung_datum: date | None = None
    rolle: str | None = None
    ergebnis: str | None = None
    ergebnis_text: str | None = None


class VorlageKurz(BaseModel):
    id: int
    aktenzeichen: str | None = None
    typ: str | None = None
    betreff: str | None = None
    datum_eingang: date | None = None
    ist_verwaltungsvorlage: bool = False


class ReferenzOut(BaseModel):
    vorlage_id: int
    aktenzeichen: str | None = None
    betreff: str | None = None
    vorlage_typ: str | None = None
    datum_eingang: date | None = None
    ref_typ: str | None = None
    konfidenz: float | None = None
    kontext: str | None = None


class KiZusammenfassung(BaseModel):
    zusammenfassung: str | None = None
    kernforderung: str | None = None
    begruendung: str | None = None
    betroffene_orte: list[str] = []
    thema: str | None = None
    partei: str | list[str] | None = None


class VorlageDetail(BaseModel):
    id: int
    aktenzeichen: str | None = None
    aktenzeichen_basis: str | None = None
    aktenzeichen_suffix: str | None = None
    typ: str | None = None
    betreff: str | None = None
    volltext_clean: str | None = None
    datum_eingang: date | None = None
    pdf_url: str | None = None
    web_url: str | None = None
    ki_zusammenfassung: KiZusammenfassung | None = None
    ist_verwaltungsvorlage: bool = False
    thema_kurz: str | None = None
    antragsteller: list[ParteiOut] = []
    beratungen: list[BeratungOut] = []
    referenzen_ausgehend: list[ReferenzOut] = []
    referenzen_eingehend: list[ReferenzOut] = []
    kette_id: int | None = None


class KettenGliedOut(BaseModel):
    vorlage: VorlageKurz
    position: int
    rolle: str | None = None


class KetteKurz(BaseModel):
    id: int
    ursprung: VorlageKurz | None = None
    typ: str | None = None
    thema: str | None = None
    status: str | None = None
    status_seit: date | None = None
    letzte_aktivitaet: date | None = None
    vertagungen_count: int = 0
    glieder_count: int = 0


class KetteDetail(BaseModel):
    id: int
    ursprung: VorlageKurz | None = None
    typ: str | None = None
    thema: str | None = None
    status: str | None = None
    status_seit: date | None = None
    letzte_aktivitaet: date | None = None
    vertagungen_count: int = 0
    glieder: list[KettenGliedOut] = []
    antragsteller: list[ParteiOut] = []
    graph: dict | None = None


class PaginatedVorlagen(BaseModel):
    items: list[VorlageKurz]
    total: int
    page: int
    page_size: int


class PaginatedKetten(BaseModel):
    items: list[KetteKurz]
    total: int
    page: int
    page_size: int
