#!/usr/bin/env python3
"""
Envoie le digest du matin au format HTML Fidulia vers le webhook n8n.
Lit un fichier HTML pré-rendu (digest-preview.html ou équivalent) et le
poste directement vers le workflow VEILLE-DIGEST-EMAIL (nœud Gmail).

Le workflow n8n doit avoir été mis à jour pour accepter {html, subject}
directement (sans nœud "Markdown vers HTML").

Usage:
    python3 send_digest_html.py /chemin/vers/digest.html
    python3 send_digest_html.py /chemin/vers/digest.html --subject "Mon sujet"
"""
import argparse
import datetime
import json
import os
import sys
import urllib.request
import urllib.error

ENV_FILE = os.path.expanduser("~/.config/fidulia/veille.env")


def load_env_file(path):
    values = {}
    try:
        with open(path, "r", encoding="utf-8") as f:
            for line in f:
                line = line.strip()
                if not line or line.startswith("#"):
                    continue
                if line.startswith("export "):
                    line = line[len("export "):]
                if "=" not in line:
                    continue
                key, _, val = line.partition("=")
                values[key.strip()] = val.strip().strip('"').strip("'")
    except OSError:
        pass
    return values


def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("html_path", help="Chemin vers le fichier HTML du digest")
    parser.add_argument("--subject", default=None, help="Sujet de l'email (optionnel)")
    parser.add_argument("--endpoint", default="veille-digest-fidulia",
                        help="Nom du webhook n8n (défaut: veille-digest-fidulia)")
    args = parser.parse_args()

    host = os.environ.get("N8N_HOST")
    token = os.environ.get("FIDULIA_TOKEN")
    if not host or not token:
        file_values = load_env_file(ENV_FILE)
        host = host or file_values.get("N8N_HOST")
        token = token or file_values.get("FIDULIA_TOKEN")
    if not host or not token:
        print(f"N8N_HOST et FIDULIA_TOKEN introuvables.", file=sys.stderr)
        sys.exit(1)

    try:
        with open(args.html_path, "r", encoding="utf-8") as f:
            html = f.read()
    except OSError as e:
        print(f"Impossible de lire {args.html_path}: {e}", file=sys.stderr)
        sys.exit(1)

    today = datetime.date.today().strftime("%d/%m/%Y")
    subject = args.subject or f"Digest Fidulia — {today}"

    payload = json.dumps({
        "html": html,
        "subject": subject,
    }, ensure_ascii=False).encode("utf-8")

    req = urllib.request.Request(
        f"{host.rstrip('/')}/webhook/{args.endpoint}",
        data=payload,
        headers={"X-Fidulia-Token": token, "Content-Type": "application/json"},
        method="POST",
    )
    try:
        with urllib.request.urlopen(req, timeout=30) as resp:
            print("✓ Envoyé —", resp.read().decode("utf-8"))
    except urllib.error.URLError as e:
        print(f"✗ Erreur: {e}", file=sys.stderr)
        sys.exit(1)


if __name__ == "__main__":
    main()
