from docx import Document
from docx.shared import Pt


DOC_PATH = "/Users/azu/Desktop/VTubeAwards/VTuber Star Awards - Website V2.docx"


def add_paragraph(doc: Document, text: str):
    p = doc.add_paragraph()
    p.paragraph_format.space_after = Pt(6)
    p.paragraph_format.line_spacing = 1.1
    p.add_run(text)


def add_bullet(doc: Document, text: str):
    p = doc.add_paragraph(style="List Bullet")
    p.paragraph_format.space_after = Pt(4)
    p.paragraph_format.line_spacing = 1.15
    p.add_run(text)


def add_number(doc: Document, text: str):
    p = doc.add_paragraph(style="List Number")
    p.paragraph_format.space_after = Pt(4)
    p.paragraph_format.line_spacing = 1.15
    p.add_run(text)


def add_table(doc: Document, headers: list[str], rows: list[list[str]]):
    table = doc.add_table(rows=1, cols=len(headers))
    table.style = "Table Grid"
    for index, header in enumerate(headers):
        table.rows[0].cells[index].text = header
    for row in rows:
        cells = table.add_row().cells
        for index, value in enumerate(row):
            cells[index].text = value


def main():
    doc = Document(DOC_PATH)

    doc.add_heading("15. Festgelegte Produktentscheidungen seit V2", level=1)
    add_bullet(doc, "Award-Kategorien und Unterkategorien werden nicht hart im Code festgelegt, sondern vom Team pro Jahr im Admin-Bereich gepflegt.")
    add_bullet(doc, "Das Endergebnis ist fuer den aktuellen MVP-Stand rein community-basiert. Eine spaetere Jury-/Panel-Gewichtung bleibt technisch als Erweiterung offen.")
    add_bullet(doc, "Die technische Umsetzung wird als Monorepo mit getrenntem Frontend und Backend aufgebaut.")
    add_bullet(doc, "Dieses Dokument bleibt die fachliche Referenz fuer weitere Iterationen. Code und Architektur sollen sich an den hier beschriebenen Produktregeln orientieren.")

    doc.add_heading("16. Finaler Tech-Stack fuer die Umsetzung", level=1)
    add_paragraph(
        doc,
        "Die Implementierung wird in zwei klar getrennten Anwendungen aufgebaut: ein Vue-basiertes Frontend fuer Public- und Admin-Oberflaechen sowie ein ASP.NET-Core-Backend fuer API, Datenmodell und Persistenz. Damit bleibt die Awards-Plattform spaeter erweiterbar fuer Auth, Moderation, CMS und Analytics."
    )
    add_table(
        doc,
        ["Schicht", "Technologie", "Rolle im System"],
        [
            ["Frontend", "Vue 3 + Vite", "SPA fuer Landingpage, Voting, Nominierung, Gewinnerarchiv und Admin-Oberflaechen"],
            ["State", "Pinia", "Zentraler Client-State fuer Overview-, Voting-, Nominierungs- und Admin-Daten"],
            ["Styling", "Tailwind CSS", "Token-basierte Layout-, Spacing- und Komponenten-Styling-Schicht"],
            ["UI Library", "PrimeVue", "Tabellen, Accordions, Form Controls und datenlastige Admin-Bausteine"],
            ["UI Patterns", "shadcn-inspirierte Vue Komponenten", "Buttons, Cards und leichtgewichtige, konsistente Primitive fuer das Designsystem"],
            ["Backend", "ASP.NET Core 8", "REST API, Domänenlogik, Validierung und Integrationsschicht"],
            ["ORM", "EF Core 8", "Mapping des Awards-Datenmodells und Query-/Persistenzlogik"],
            ["Datenbank", "PostgreSQL", "Primäre relationale Persistenz fuer Seasons, Kategorien, Kandidaten, Nominierungen und Votes"],
        ],
    )

    doc.add_heading("17. Frontend-Architektur", level=1)
    add_paragraph(
        doc,
        "Das Frontend wird als Vite-Vue-Anwendung mit Router und Pinia aufgebaut. Die oeffentlichen Bereiche und der Admin-Bereich teilen sich dieselbe Design-Basis, werden aber als getrennte Views organisiert. PrimeVue kommt dort zum Einsatz, wo datenlastige oder interaktive Controls den Entwicklungsaufwand senken; leichtgewichtige Basis-UI wie Buttons und Cards werden als shadcn-artige Vue-Primitives lokal gepflegt."
    )
    add_number(doc, "AppShell mit globaler Navigation, Branding und CTA-Struktur fuer oeffentliche und interne Oberflaechen.")
    add_number(doc, "Router-basierte Views fuer Home, Nominierung, Voting, Gewinner und Admin.")
    add_number(doc, "Pinia Store als API-Orchestrator fuer Overview, Saisonkategorien, Gewinnerarchiv und Admin Dashboard.")
    add_number(doc, "API-Layer mit konfigurierbarer Backend-URL ueber Vite-Environment-Variable.")
    add_number(doc, "Fallback-Daten im Frontend, damit UI-Entwicklung und Demo-Zustaende nicht vom sofort verfuegbaren Backend abhaengen.")

    doc.add_heading("18. Backend-Architektur", level=1)
    add_paragraph(
        doc,
        "Das Backend wird als ASP.NET-Core-Web-API mit EF Core 8 und PostgreSQL aufgebaut. Die erste Version priorisiert ein sauberes Domänenmodell und lesbare Public-/Admin-Endpunkte vor Auth-, Moderations- oder CMS-Komplexität. Die API ist damit spaeter gut erweiterbar fuer Twitch OAuth, Session-Management, Missbrauchsschutz und Review-Workflows."
    )
    add_table(
        doc,
        ["Bereich", "Implementationsidee"],
        [
            ["Public API", "Overview fuer Landingpage, saisonbezogene Kategorien, Gewinnerarchiv, Nominierungs- und Voting-Endpunkte"],
            ["Admin API", "Dashboard-Metriken, Aktivitaeten und spaeter Management-Endpunkte fuer Kategorien, Reviews und Risk Flags"],
            ["Persistenz", "EF-Core-DbContext mit PostgreSQL Provider und relationalem Datenmodell"],
            ["Seed Data", "Starterdaten fuer aktuelle und vergangene Seasons, Kategorien, Kandidaten und Gewinner"],
            ["CORS", "Explizite Freigabe fuer lokale Frontend-Hosts waehrend der Entwicklung"],
        ],
    )

    doc.add_heading("19. Finales Datenmodell fuer den MVP", level=1)
    add_bullet(doc, "Season: Jahr, Phase, Show-Datum, Community-only-Flag und Zeitfenster fuer Nominierung/Voting/Review.")
    add_bullet(doc, "Category: saisongebundene Kategorie mit Grouping, Beschreibung, Sortierung und Nominierungslimits.")
    add_bullet(doc, "Candidate: saison- und kategorienbezogene Kandidatenbasis fuer Voting und Archiv.")
    add_bullet(doc, "AwardResult: Gewinnerabbildung fuer Archiv und Rueckblicke.")
    add_bullet(doc, "Nomination: vom User eingereichte Nominierungen inkl. Freitext-/Alias-Faellen.")
    add_bullet(doc, "VoteBallot + VoteEntry: eingereichte Votes pro User und Kategorie.")

    doc.add_heading("20. API-Schnittstellen fuer den aktuellen Stand", level=1)
    add_bullet(doc, "GET /api/public/overview - Landingpage- und Event-Zusammenfassung.")
    add_bullet(doc, "GET /api/public/seasons/{year}/categories - Kategorien und Kandidaten eines Jahres.")
    add_bullet(doc, "GET /api/public/seasons/{year}/winners - Gewinnerarchiv je Jahr.")
    add_bullet(doc, "POST /api/public/nominations - Speichern von Nominierungs-Entwuerfen/Einreichungen.")
    add_bullet(doc, "POST /api/public/votes - Speichern eines Voting-Ballots.")
    add_bullet(doc, "GET /api/admin/dashboard - Kennzahlen und Aktivitaeten fuer die Admin-Uebersicht.")

    doc.add_heading("21. Projektstruktur im Repository", level=1)
    add_bullet(doc, "frontend/ - Vue 3 + Vite Anwendung")
    add_bullet(doc, "Backend/ - ASP.NET Core 8 Web API")
    add_bullet(doc, "prototype/ - fruehere visuelle Prototyping-Artefakte und Designexperimente")
    add_bullet(doc, "README.md - lokaler Startpunkt fuer Setup und Entwicklungsworkflow")

    doc.add_heading("22. Implementierungsstatus", level=1)
    add_bullet(doc, "Frontend-Grundgeruest aufgebaut: Router, Pinia Store, AppShell, Public Views und Admin View.")
    add_bullet(doc, "PrimeVue und Tailwind in die Frontend-Basis integriert.")
    add_bullet(doc, "shadcn-artige Basis-Komponenten fuer Buttons und Cards lokal angelegt.")
    add_bullet(doc, "Backend-Web-API mit EF-Core-Domänenmodell, Seed-Daten und Public-/Admin-Endpunkten implementiert.")
    add_bullet(doc, "Frontend und Backend kompilieren erfolgreich. Datenbank-Migrationen und produktive Auth-/Session-Flows sind der naechste technische Schritt.")

    doc.add_heading("23. Empfohlene naechste technische Schritte", level=1)
    add_number(doc, "PostgreSQL lokal oder in einer Dev-Umgebung bereitstellen und erste EF-Core-Migration erzeugen.")
    add_number(doc, "Twitch OAuth serverseitig ins Backend integrieren und Session-Management anschliessen.")
    add_number(doc, "Nominierungs- und Voting-Endpunkte um echte User-Identitaet, Limits und Idempotenz erweitern.")
    add_number(doc, "Admin-Endpunkte fuer Season-/Category-Management, Reviews und Risk Flags ausbauen.")
    add_number(doc, "Frontend-Design auf final freigegebene visuelle Richtung und Assets angleichen.")

    doc.save(DOC_PATH)


if __name__ == "__main__":
    main()
