# -*- coding: utf-8 -*-
import imaplib
import email
from email.header import decode_header
import json
import os
import urllib.request
import urllib.error
from datetime import datetime

# --- DINA INSTÄLLNINGAR ---
EMAIL_ADRESS = "pier.svelander@gmail.com"
APP_LOSENORD = "zhml tbpg hqwb dotq"
GEMINI_API_NYCKEL = "AQ.Ab8RN6J6mQ0pqE8RxscBithFLZ6UmFfulUHtHFxIt-GyqsPv9w"

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

def hamta_viktiga_mejl():
    print("Ansluter till Gmail för att leta efter skola, paket och resor...")
    try:
        mail = imaplib.IMAP4_SSL("imap.gmail.com")
        mail.login(EMAIL_ADRESS, APP_LOSENORD)
        mail.select("inbox")

        # Sök efter alla meddelanden och ta de 30 senaste
        status, messages = mail.search(None, "ALL")
        if status != "OK":
            print("Kunde inte söka i inkorgen.")
            return []

        email_ids = messages[0].split()
        senaste_ids = email_ids[-30:]
        
        mejl_lista = []
        for e_id in reversed(senaste_ids):
            res, msg_data = mail.fetch(e_id, "(RFC822)")
            for response_part in msg_data:
                if isinstance(response_part, tuple):
                    msg = email.message_from_bytes(response_part[1])
                    
                    # Avsändare och ämne
                    subject, encoding = decode_header(msg["Subject"])[0]
                    if isinstance(subject, bytes):
                        subject = subject.decode(encoding or "utf-8", errors="ignore")
                    
                    from_ = msg.get("From")
                    
                    # Extrahera textinnehåll
                    body = ""
                    if msg.is_multipart():
                        for part in msg.walk():
                            if part.get_content_type() == "text/plain":
                                try:
                                    body = part.get_payload(decode=True).decode("utf-8", errors="ignore")
                                    break
                                except: pass
                    else:
                        try:
                            body = msg.get_payload(decode=True).decode("utf-8", errors="ignore")
                        except: pass
                    
                    # Förfiltrering för att fånga skola, paket och resor
                    nyckelord = [
                        "skola", "fritids", "utflykt", "matsäck", "gympa", "lov", "studiedag", 
                        "unikum", "moodle", "amazon", "postnord", "dhl", "bring", "flyg", 
                        "tåg", "biljett", "bokning", "paket", "leverans"
                    ]
                    text_for_check = (str(subject) + " " + str(body)).lower()
                    
                    if any(k in text_for_check for k in nyckelord):
                        mejl_lista.append({
                            "avsandare": str(from_),
                            "amne": str(subject),
                            "innehall": body[:1500]
                        })
        mail.logout()
        return mejl_lista
    except Exception as e:
        print(f"❌ Gmail-fel: {e}")
        return []

def analysera_mejl_med_ai(mejl_lista):
    if not mejl_lista:
        print("Inga relevanta mejl hittades med nyckelorden.")
        return []

    print(f"Hittade {len(mejl_lista)} intressanta mejl. Låter AI-hjärnan analysera...")
    
    mejl_text = ""
    for m in mejl_lista:
        mejl_text += f"--- MEJL ---\nFrån: {m['avsandare']}\nÄmne: {m['amne']}\nInnehåll: {m['innehall']}\n\n"

    # Dagens datum skickas med så AI:n vet vad som är framtid
    dagens_datum = datetime.now().strftime("%Y-%m-%d")

    prompt = f'''
    Du är en smart familjeassistent. Idag är datumet {dagens_datum}. 
    Analysera följande mejl från en pappa (Pier) och leta efter händelser eller leveranser som ligger i framtiden (från och med idag eller senare) och som han absolut inte får missa.
    Det kan handla om:
    - Skola & Fritids (utflykter, matsäck, kläder/gummistövlar, idrott, studiedagar, lov).
    - Paketleveranser (Amazon, PostNord, DHL, Bring på väg).
    - Resor & Logistik (flygtider, tåg, hotellbokningar).

    REGLER:
    1. Ignorera absolut sådant som har passerat till datumet tidigare än {dagens_datum}.
    2. Om ett mejl bara är vanlig reklam eller ointressant, ta inte med det.
    3. Svara ENBART med en JSON-lista över framtida händelser/påminnelser i exakt detta format:
    [
      {{
        "datum": "2026-08-26",
        "kategori": "Skola",
        "text": "Onsdag: Matsäck med till skogen"
      }}
    ]
    Om inga relevanta framtida händelser finns, svara med en tom lista: []

    Här är mejlen:
    {mejl_text}
    '''

    url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash-lite:generateContent?key={GEMINI_API_NYCKEL.strip()}"
    data = {"contents": [{"parts": [{"text": prompt}]}]}
    
    try:
        req = urllib.request.Request(url, data=json.dumps(data).encode('utf-8'), headers={'Content-Type': 'application/json'})
        svar = json.loads(urllib.request.urlopen(req, timeout=40).read().decode('utf-8'))
        text = svar['candidates'][0]['content']['parts'][0]['text'].strip()
        
        if text.startswith("```json"): text = text[7:]
        if text.startswith("```"): text = text[3:]
        if text.endswith("```"): text = text[:-3]
        
        resultat = json.loads(text.strip())
        
        fil = os.path.join(BASE_DIR, "gmail_data.json")
        with open(fil, "w", encoding="utf-8") as f:
            json.dump(resultat, f, ensure_ascii=False, indent=2)
            
        print(f"✅ Analysen klar! Hittade {len(resultat)} aktiva påminnelser från mejlen.")
        return resultat
    except Exception as e:
        print(f"❌ AI-analys fel: {e}")
        return []

mejl = hamta_viktiga_mejl()
analysera_mejl_med_ai(mejl)