# -*- coding: utf-8 -*-
import urllib.request
import json
import os
import requests
from datetime import datetime

# --- DINA NYCKLAR ---
GEMINI_API_NYCKEL = "AQ.Ab8RN6J6mQ0pqE8RxscBithFLZ6UmFfulUHtHFxIt-GyqsPv9w"
TIBBER_TOKEN = "32DAB048B723F3DB40443C199B658BB2A0B23BD806B463AFB60262489AF51738-1"

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

def hamta_tibber_priser():
    """Hämtar dagens (och morgondagens om tillgängligt) elpriser via Tibber API"""
    if not TIBBER_TOKEN or "KLISTRA_IN" in TIBBER_TOKEN:
        print("Väntar på Tibber-nyckel...")
        return None

    # Tibber använder GraphQL för sina frågor. Vi frågar efter priser för idag och imorgon.
    query = """
    {
      viewer {
        homes {
          currentSubscription {
            priceInfo {
              current { total startsAt }
              today { total startsAt }
              tomorrow { total startsAt }
            }
          }
        }
      }
    }
    """
    
    headers = {
        "Authorization": f"Bearer {TIBBER_TOKEN}",
        "Content-Type": "application/json"
    }

    try:
        response = requests.post("https://api.tibber.com/v1-beta/gql", json={"query": query}, headers=headers)
        response.raise_for_status()
        data = response.json()
        
        # Plockar ut prisinformationen från Tibbers ganska djupa datastruktur
        pris_info = data['data']['viewer']['homes'][0]['currentSubscription']['priceInfo']
        return pris_info
    except Exception as e:
        print(f"❌ Fel vid hämtning från Tibber: {e}")
        return None

def analysera_elpriser(pris_info):
    """Skickar priserna till Gemini för att få fram smarta, handlingskraftiga råd."""
    if not pris_info:
        return
        
    print("Analyserar elpriserna för att hitta de bästa sparförslagen...")
    
    dagens_priser = pris_info.get('today', [])
    morgondagens_priser = pris_info.get('tomorrow', [])
    aktuellt_pris = pris_info.get('current', {})

    # Vi bygger en enkel text-sammanfattning av priserna att skicka till AI:n
    pris_sammanfattning = "Dagens priser (kr/kWh per timme):\n"
    for p in dagens_priser:
        timme = p['startsAt'][11:16] # Klipper ut t.ex. "14:00"
        pris_sammanfattning += f"Kl {timme}: {round(p['total'], 2)} kr\n"
        
    if morgondagens_priser:
        pris_sammanfattning += "\nMorgondagens priser (kr/kWh per timme):\n"
        for p in morgondagens_priser:
            timme = p['startsAt'][11:16]
            pris_sammanfattning += f"Kl {timme}: {round(p['total'], 2)} kr\n"

    prompt = f"""
    Du är en extremt smart och ekonomisk rådgivare för en familj i Falun (Sverige) som vill spara pengar på elen. 
    Mannen i huset är elansvarig och kör en V60 laddhybrid. Han styr mycket av sitt smarta hem (som tvätt, disk och billaddning) via Homey Pro och Raspberry Pi.

    Här är de aktuella elpriserna från deras Tibber-mätare:
    {pris_sammanfattning}

    Din uppgift:
    Analysera priserna och ge 3-4 korta, extremt konkreta och handlingskraftiga råd för NÄR han bör köra de stora energibovarna (ladda bilen, köra diskmaskin, köra tvättmaskin) och när han absolut ska undvika det. 
    Håll tonen peppig, teknisk men tydlig. 

    Svara med en kort inledning och sedan en punktlista. Inga långa utläggningar.
    """

    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'))
        ai_rad = svar['candidates'][0]['content']['parts'][0]['text'].strip()
        
        # Spara råden till en Javascript-fil som skärmen sedan kan läsa (även om vi inte kopplat in den än)
        fil = os.path.join(BASE_DIR, "tibber_data.js")
        with open(fil, "w", encoding="utf-8") as f:
            f.write(f"const tibberRad = {json.dumps(ai_rad, ensure_ascii=False)};\n")
            
        print("\n⚡ --- TIBBER-HJÄRNANS RÅD --- ⚡")
        print(ai_rad)
        print("---------------------------------")
        print("✅ Analysen sparad!")
        
    except Exception as e:
        print(f"❌ Fel vid analys av elpriser: {e}")

# Kör skriptet
priser = hamta_tibber_priser()
if priser:
    analysera_elpriser(priser)