
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Génère les références d'Évangile du jour pour chaque date de 2026 (zone France)
depuis l'API AELF (traduction officielle liturgique), et construit une
'citation' ≤ 200 caractères (paraphrase courte, sans texte protégé).

Sorties:
  - CSV: daily_gospels_2026_france.csv
  - SQL: daily_sentence_2026_france.sql  (INSERT INTO `daily_sentence`)

Prérequis:
  pip install requests python-dateutil
Docs API: https://api.aelf.org/
"""

import csv
import html
import re
import requests
from datetime import date, timedelta

ANNEE = 2026
ZONE = "france"               # france | belgique | suisse | canada | ...
TABLE = "daily_sentence"

CSV_OUT = f"daily_gospels_{ANNEE}_{ZONE}.csv"
SQL_OUT = f"daily_sentence_{ANNEE}_{ZONE}.sql"

API_MASS = "https://api.aelf.org/v1/messes/{date}/{zone}"

def fetch_mass(date_str, zone):
    url = API_MASS.format(date=date_str, zone=zone)
    r = requests.get(url, timeout=20)
    r.raise_for_status()
    return r.json()

def extract_gospel(mass_json):
    """
    Retourne (title, ref, note) pour l'Évangile.
    L'API peut renvoyer une liste de messes (vigile, jour).
    'title' ~ "Évangile de Jésus Christ selon saint ..."
    'ref'   ~ "Lc 2, 22-35"
    'note'  ~ sous-titre/intro éventuel.
    """
    masses = mass_json if isinstance(mass_json, list) else [mass_json]
    for m in masses:
        readings = m.get("lectures") or m.get("readings") or []
        for rd in readings:
            t = (rd.get("type") or "").lower()
            if "evangile" in t:
                title = rd.get("titre") or rd.get("title") or ""
                ref   = rd.get("reference") or rd.get("ref") or ""
                note  = rd.get("sous_titre") or rd.get("intro") or ""
                return title.strip(), ref.strip(), note.strip()
    return "", "", ""

def make_quote_200(title, ref, note):
    """
    Produit une 'citation' ≤ 200 caractères sans reprendre le texte biblique.
    """
    base = title or "Évangile du jour"
    tail = f" — {ref}" if ref else ""
    if note:
        note_clean = re.sub(r"\s+", " ", note)
        candidate = f"{base} : {note_clean}{tail}"
    else:
        candidate = f"{base}{tail}"
    return candidate[:200]

def sql_escape(s):
    return s.replace("\\", "\\\\").replace("'", "\\'")

def main():
    start = date(ANNEE, 1, 1)
    end = date(ANNEE, 12, 31)

    rows = []
    inserts = []
    d = start

    while d <= end:
        dstr = d.isoformat()
        try:
            mass = fetch_mass(dstr, ZONE)
            title, ref, note = extract_gospel(mass)
            quote200 = make_quote_200(title, ref, note)

            # CSV
            rows.append([dstr, ref, title, quote200])

            # SQL (content vide ici ; tu peux mettre un lien AELF si tu veux)
            title_sql = sql_escape(title)
            excerpt_sql = f"'{sql_escape(ref)}'" if ref else "NULL"
            inserts.append(
                "INSERT INTO `{table}` (`id`, `title`, `excerpt`, `type`, `date`, `created_at`, `content`) VALUES\n"
                "(NULL, '{title}', {excerpt}, 'evangile', '{date}', NULL, '');\n"
                .format(table=TABLE, title=title_sql, excerpt=excerpt_sql, date=dstr)
            )

        except Exception:
            # En cas d'erreur réseau/structure, on laisse une ligne de secours
            link = f"https://www.aelf.org/{dstr}/romain/messe"
            rows.append([dstr, "", "", f"Lectures du jour : {link}"])
            inserts.append(
                "INSERT INTO `{table}` (`id`, `title`, `excerpt`, `type`, `date`, `created_at`, `content`) VALUES\n"
                "(NULL, '', NULL, 'evangile', '{date}', NULL, '{content}');\n"
                .format(table=TABLE, date=dstr, content=sql_escape(link))
            )

        d += timedelta(days=1)

    # CSV
    with open(CSV_OUT, "w", encoding="utf-8", newline="") as f:
        w = csv.writer(f, delimiter=';')
        w.writerow(["date","excerpt","title","quote200"])
        w.writerows(rows)

    # SQL
    with open(SQL_OUT, "w", encoding="utf-8") as f:
        f.write("-- Références Évangile AELF (traduction officielle liturgique)\n")
        f.write(f"-- Année: {ANNEE} | Zone: {ZONE}\n\n")
        for ins in inserts:
            f.write(ins)

    print(f"Fichiers générés:\n - {CSV_OUT}\n - {SQL_OUT}\n")

if __name__ == "__main__":
    main()
