#!/usr/bin/env python3
"""Täglich um 23:10: Prüfe Gmail auf Gesundheitsdaten und übertrage ins Tagebuch. Verhindert Duplikate."""

import subprocess
import sqlite3
import json
import re
from datetime import date

DB_PATH = "/home/agent/.local/share/health-data.db"
GOG = "/home/agent/.local/bin/gog"
ACCOUNT = "friday.uplink@gmail.com"
KEYRING_PW = "LammBitch30"

def run_gog(args):
    env = {
        "GOG_KEYRING_PASSWORD": KEYRING_PW,
        "HOME": "/home/agent",
        "XDG_CONFIG_HOME": "/home/agent/.config",
    }
    result = subprocess.run(
        [GOG, "-a", ACCOUNT] + args,
        capture_output=True, text=True, env=env
    )
    return result

def is_duplicate(conn, today_str, subject):
    """Prüfe ob Eintrag mit gleichem Betreff/Quelle bereits existiert."""
    cur = conn.cursor()
    # Suche nach ähnlichen Einträgen
    entries = cur.execute("""
        SELECT id, titel FROM tagebuch 
        WHERE datum = ? AND kategorie = 'gesundheit'
        AND (titel LIKE ? OR titel LIKE ? OR titel LIKE ?)
    """, (today_str, f"%{subject[:20]}%", f"%{today_str}%", "%Gesundheitsdaten%")).fetchall()
    return len(entries) > 0

def main():
    today = date.today()
    today_str = today.strftime("%Y-%m-%d")
    today_de = today.strftime("%d. %B %Y")
    
    # Suche nach Gesundheitsdaten-E-Mails (heute oder gestern, falls Automation spät sendet)
    search_query = "from:quickview.newsflash@gmail.com OR from:gasser.m@icloud.com subject:Gesundheitsdaten newer_than:1d"
    
    result = run_gog(["gmail", "search", search_query, "--max", "10", "-j"])
    
    if result.returncode != 0:
        print(f"Fehler bei Gmail-Suche: {result.stderr}")
        return
    
    try:
        search_data = json.loads(result.stdout)
        threads = search_data.get("threads", [])
    except json.JSONDecodeError:
        print("JSON Parse Error:", result.stdout)
        return
    
    if not threads:
        print(f"Keine Gesundheitsdaten-E-Mails für {today_str} gefunden")
        return
    
    print(f"Gefunden: {len(threads)} E-Mail(s)")
    
    conn = sqlite3.connect(DB_PATH)
    new_count = 0
    dup_count = 0
    
    for thread in threads:
        msg_id = thread.get("id")
        subject = thread.get("subject", "")
        from_addr = thread.get("from", "")
        
        print(f"\n--- E-Mail: {subject} ---")
        print(f"Von: {from_addr}")
        
        # Vollständige E-Mail lesen
        get_result = run_gog(["gmail", "get", msg_id, "-j"])
        
        if get_result.returncode != 0:
            print(f"Fehler beim Lesen der E-Mail: {get_result.stderr}")
            continue
        
        try:
            message = json.loads(get_result.stdout)
        except json.JSONDecodeError:
            print("JSON Parse Error:", get_result.stdout)
            continue
        
        body = message.get("body", "")
        
        # Prüfe auf Duplikate
        if is_duplicate(conn, today_str, subject):
            print(f"⚠ Duplikat erkannt — Überspringen")
            dup_count += 1
            continue
        
        # Werte extrahieren
        values = {}
        json_match = re.search(r'\{.*\}', body, re.DOTALL)
        if json_match:
            try:
                values = json.loads(json_match.group())
            except:
                pass
        
        # Sauberen Text extrahieren (HTML-Tags entfernen)
        clean_body = re.sub(r'<[^>]+>', '', body)
        clean_body = re.sub(r'\s+', ' ', clean_body).strip()
        
        # Ins Tagebuch eintragen
        cur = conn.cursor()
        cur.execute("""
            INSERT INTO tagebuch (datum, kategorie, titel, inhalt, wirkung, verknuepft, notizen)
            VALUES (?, ?, ?, ?, ?, ?, ?)
        """, (today_str, "gesundheit", f"Gesundheitsdaten: {today_de}", 
              clean_body, "", "gesundheit", 
              f"Von: {from_addr}, Betreff: {subject}"))
        
        conn.commit()
        print(f"✓ In Tagebuch eingetragen für {today_de}")
        new_count += 1
    
    conn.close()
    print(f"\nZusammenfassung: {new_count} neue, {dup_count} Duplikate übersprungen")

if __name__ == "__main__":
    main()
