"""
Application Version Information

Semantic Versioning: MAJOR.MINOR.PATCH
- MAJOR: Breaking Change, DB-Migration inkompatibel
- MINOR: Neues Feature, neues Modul
- PATCH: Bugfix, kleine Änderung, Refactor
"""

APP_VERSION = "0.9q"
BUILD_DATE = "2026-04-11"
DB_SCHEMA_VERSION = "20260409c"  # 048/049 vitals_baseline.source csv + SAVEPOINT Import

MODULE_VERSIONS = {
    "auth": "1.2.0",
    "profiles": "1.1.0",
    "reference_values": "1.3.0",
    "admin_reference_value_types": "1.0.0",
    "weight": "1.0.3",
    "circumference": "1.0.1",
    "caliper": "1.0.1",
    "activity": "1.2.0",  # GET /activity: optional days= window + limit
    "nutrition": "1.0.2",
    "photos": "1.0.0",
    "insights": "1.3.0",
    "prompts": "1.1.0",
    "admin": "1.4.0",  # Widget × Feature-Zuordnung (Migration 041)
    "stats": "1.0.1",
    "exportdata": "1.1.0",
    "importdata": "1.0.0",
    "membership": "2.1.0",
    "workflow": "0.7.0",  # Part 3: Inline Prompts (reference + inline mode)
    "app_dashboard": "1.11.0",  # Entitlements: DB-Override widget→features (AND), sonst Katalog
    "csv_import": "0.3.2",  # Import-Fehler: enrich_row_error / freundlichere 500-Hinweise
    "admin_csv_templates": "0.3.0",  # POST /validate + Speichern nur bei valid (422 + warnings in Response)
}

CHANGELOG = [
    {
        "version": "0.9q",
        "date": "2026-04-11",
        "changes": [
            "Workflow Engine Part 3: Inline Prompts",
            "Frontend: Radio Buttons (Reference/Inline), InlineTemplateEditor Component",
            "Frontend: Placeholder Picker für Inline-Templates, Cursor-Position Tracking",
            "Backend: load_prompt_template() unterstützt inline_template",
            "Backend: WorkflowNode.inline_template Feld hinzugefügt",
            "Serialization: inline_template speichern/laden in graph_data",
            "Validation: Prüft dass entweder prompt_slug ODER inline_template gesetzt",
        ],
    },
    {
        "version": "0.9p",
        "date": "2026-04-09",
        "changes": [
            "Issue #21 Phase 1: Migration 042/043 (csv_field_mappings, csv_import_log, Seeds)",
            "csv_parser: core (Decode/Delimiter/Sample), module_registry, type_converter, permissions",
            "API /api/csv: modules, limits, mappings, analyze, copy",
            "API /api/admin/csv-templates: CRUD System-Templates, import-limits (system_config)",
            "Issue #21: POST /api/csv/import + executor (nutrition Aggregat/Tag, weight, Blutdruck); activity 501",
            "Issue #21: GET-Analyse über alle Vorlagen; Import nur mapping_id; GUI ohne Modul-Dropdown",
            "v9c_cleanup_features.sql: FK-sichere csv_import→data_import Reihenfolge",
        ],
    },
    {
        "version": "0.9n",
        "date": "2026-04-06",
        "changes": [
            "Admin: Widgets × Features (Migration 041, AND-Gates, Hybrid mit widget_catalog)",
            "Admin: Produkt-Dashboard-Systemstandard (Migration 040 system_config, API, UI)",
            "Phase 4: End Node Template Engine",
            "workflow_models.py: EndNodeOutputMode enum (AUTO, TEMPLATE)",
            "workflow_executor.py: execute_end_node() with Jinja2 template rendering",
            "Template Context: {{node_id.analysis_core}}, {{node_id.decision_signals.key}}",
            "Conditional Rendering: {% if node_id %} for optional paths",
            "AUTO Mode: Backward compatible concatenation of all analyses",
            "TEMPLATE Mode: Custom Jinja2 templates with placeholder support",
        ]
    },
    {
        "version": "0.9m",
        "date": "2026-04-04",
        "changes": [
            "Phase 4: Join Nodes and Path Consolidation",
            "join_evaluator.py: Join-Strategie-Evaluator (wait_all, wait_any, best_effort)",
            "Path Status Collection: Sammelt incoming paths, prüft Ausführungsstatus",
            "Result Consolidation: Merged analysis_cores + combined signals (mit node_id Präfix)",
            "Skip-Handling: IGNORE_SKIPPED, USE_PLACEHOLDER, REQUIRE_MINIMUM",
            "Partial Execution: Korrekte Behandlung von SKIPPED/FAILED Pfaden",
            "workflow_executor.py: execute_join_node() Implementation",
            "NodeExecutionState: List[NormalizedSignal] korrekt konvertiert zu Dict",
            "Unit-Tests Phase 4: 18 Tests für Join Nodes (alle passing)",
            "Phase 2/3 Backward Compatibility: 31 Tests (alle passing)",
        ]
    },
    {
        "version": "0.9l",
        "date": "2026-04-04",
        "changes": [
            "Phase 3: Logic Nodes + Conditional Branching",
            "logic_evaluator.py: Deterministischer Logic Evaluator (EQ, NEQ, IN, GT, LT, CONTAINS, AND, OR, NOT)",
            "workflow_executor.py: Conditional Branching via BFS-Traversierung mit Edge-Activation",
            "execute_logic_node(): Bedingungen evaluieren, then/else Pfade aktivieren",
            "Fallback-Strategien: CONSERVATIVE_SKIP, DEFAULT_PATH, UNCERTAINTY_PATH, DOCUMENT_ONLY",
            "workflow_models.py: CONTAINS Operator hinzugefügt",
            "Unit-Tests Phase 3: 20 Tests für Logic Evaluator (alle passing)",
            "Phase 2 Backward Compatibility: 11 Tests aktualisiert (alle passing)",
        ]
    },
    {
        "version": "0.9k",
        "date": "2026-04-03",
        "changes": [
            "Phase 2: Normalisierung + Workflow Executor",
            "normalization_engine.py: Synonym-Mapping, 5 Statuswerte (valid, normalized, unclear, invalid, not_decidable)",
            "workflow_executor.py: Sequenzielle Workflow-Ausführung, Node-State-Tracking, Ergebnis-Aggregation",
            "Integration in prompt_executor.py: Dispatcher für type='workflow'",
            "API-Router workflows.py: POST /workflows/{id}/execute, GET /workflows/executions/{id}",
            "Unit-Tests Phase 2: 27 Tests (normalization_engine + workflow_executor)",
            "Erweitert: workflow_models.py (NormalizedSignal, NodeExecutionState, ExecutionResult)",
        ]
    },
    {
        "version": "0.9j",
        "date": "2026-04-03",
        "changes": [
            "Phase 1: Fragenergänzung + Strukturierter Container",
            "question_augmenter.py: Hybrid-Modell (Knotengebundene Fragen überschreiben Prompt-Defaults)",
            "result_container_parser.py: Markdown-Sektionen (Analysekern, Entscheidungsanteil, Begründungsanker)",
            "Integration in execute_base_prompt(): Fragenergänzung vor LLM-Call, Parsing nach LLM-Response",
            "API-Router workflow_questions.py: CRUD für workflow_question_catalog",
            "Unit-Tests Phase 1: 25 Tests (question_augmenter + result_container_parser)",
        ]
    },
    {
        "version": "0.9i",
        "date": "2026-04-03",
        "changes": [
            "Phase 0: Workflow Engine Foundation",
            "DB-Migration 034: workflow_definitions, workflow_question_catalog, workflow_executions",
            "Pydantic-Modelle für Workflow-Graph (WorkflowGraph, Node, Edge, Condition)",
            "Graph-Parsing, Topologische Sortierung, DAG-Validierung",
            "Dispatcher-Erweiterung: type='workflow' (Stub-Implementierung)",
            "Unit-Tests für Phase 0 (Graph-Parsing, Zyklen-Erkennung, Erreichbarkeit)",
        ]
    },
    {
        "version": "0.9h+",
        "date": "2026-03-28",
        "changes": [
            "Phase 0c: Multi-Layer Data Architecture Complete",
            "Data Layer Migration (97 Funktionen in 6 Modulen)",
            "20 neue Chart Endpoints (E1-E5, A1-A8, R1-R5, C1-C4)",
            "Single Source of Truth für Datenberechnungen",
        ]
    },
]
