# triage.py

import mysql.connector
from app.db.connection import get_connection
from app.ai.triager import triage_article
from app.ai.triage_prompts import TRIAGE_VERSION

# Garde-fou (tu pourras le monter à 2000)
MAX_TO_TRIAGE = 1100

# Modèle (tu peux changer si besoin)
TRIAGE_MODEL = "gpt-4o-mini"


def triage():
    conn = get_connection()
    cur = conn.cursor(dictionary=True)

    # Récupérer des articles bruts non triés (par version)
    cur.execute(
        """
        SELECT ar.id, ar.title, ar.excerpt, ar.lang
        FROM articles_raw ar
        LEFT JOIN articles_triage tr
            ON tr.raw_id = ar.id AND tr.triage_version = %s
        WHERE tr.raw_id IS NULL
            AND ar.published_at >= CURDATE()
        ORDER BY ar.published_at DESC
        LIMIT %s
        """,
        (TRIAGE_VERSION, MAX_TO_TRIAGE),
    )

    rows = cur.fetchall()

    if not rows:
        print("ℹ️ Aucun article à trier (tout est déjà trié).")
        cur.close()
        conn.close()
        return

    inserted = 0
    failed = 0
    scores = []

    for r in rows:
        raw_id = r["id"]
        title = r["title"] or ""
        excerpt = r.get("excerpt") or ""
        lang = (r.get("lang") or "unknown").strip()

        try:
            result = triage_article(title=title, excerpt=excerpt, model=TRIAGE_MODEL)

            # Si le flux a déjà une langue, on la préfère (sinon on garde celle renvoyée)
            source_lang = (r.get("lang") or "unknown").strip()

            cur.execute(
                """
                INSERT INTO articles_triage
                  (raw_id, triage_score, triage_label, triage_reason,
                   source_lang, model, triage_version, tokens_in, tokens_out)
                VALUES
                  (%s, %s, %s, %s,
                   %s, %s, %s, %s, %s)
                """,
                (
                    raw_id,
                    result["triage_score"],
                    result["triage_label"],
                    result["triage_reason"],
                    source_lang,
                    result["model"],
                    TRIAGE_VERSION,
                    result["tokens_in"],
                    result["tokens_out"],
                ),
            )

            inserted += 1
            scores.append(result["triage_score"])
            conn.commit()

            print(
                f"✅ Trié {TRIAGE_VERSION} score={result['triage_score']} "
                f"label={result['triage_label']} raw_id={raw_id}"
            )

        except mysql.connector.errors.IntegrityError:
            # déjà trié (rare si exécution concurrente)
            conn.commit()

        except Exception as e:
            failed += 1
            print(f"❌ Échec raw_id={raw_id}: {e}")

    cur.close()
    conn.close()

    scoremax = max(scores) if scores else None
    print(
        f"🎯 Triage terminé — inserted={inserted}, failed={failed}, "
        f"limit={MAX_TO_TRIAGE}, scoremax={scoremax}"
    )


if __name__ == "__main__":
    triage()
