#!/usr/bin/env python3
"""Fetch YAZIO diary entries for a given date and output as JSON."""

import sys
import json
import requests

BASE_URL = "https://yzapi.yazio.com/v15"
CLIENT_ID = "1_4hiybetvfksgw40o0sog4s884kwc840wwso8go4k8c04goo4c"
CLIENT_SECRET = "6rok2m65xuskgkgogw40wkkk8sw0osg84s8cggsc4woos4s8o"

def authenticate(email, password):
    """Get access token from YAZIO."""
    resp = requests.post(f"{BASE_URL}/oauth/token", json={
        "client_id": CLIENT_ID,
        "client_secret": CLIENT_SECRET,
        "username": email,
        "password": password,
        "grant_type": "password",
    })
    resp.raise_for_status()
    return resp.json()["access_token"]

def get_consumed_items(token, date):
    """Get consumed items for a specific date."""
    resp = requests.get(
        f"{BASE_URL}/user/consumed-items",
        params={"date": date},
        headers={"Authorization": f"Bearer {token}"},
    )
    resp.raise_for_status()
    return resp.json()

def search_product(token, query, locale="de_DE"):
    """Search for a product by name."""
    resp = requests.get(
        f"{BASE_URL}/products/search",
        params={"query": query, "locales": locale},
        headers={"Authorization": f"Bearer {token}"},
    )
    resp.raise_for_status()
    return resp.json()

def main():
    if len(sys.argv) < 3:
        print(f"Usage: {sys.argv[0]} <email> <date> [locale]")
        print("  date: YYYY-MM-DD or 'today'")
        print("  locale: de_DE (default) or en_US")
        sys.exit(1)

    email = sys.argv[1]
    date_arg = sys.argv[2]
    locale = sys.argv[3] if len(sys.argv) > 3 else "de_DE"

    # Resolve date
    from datetime import datetime, timedelta
    if date_arg == "today":
        date = datetime.now().strftime("%Y-%m-%d")
    else:
        date = date_arg

    # Authenticate
    token = authenticate(email, password)
    
    # Fetch consumed items
    data = get_consumed_items(token, date)
    
    # Enrich products with names
    products = data.get("products", [])
    enriched = []
    seen_ids = set()
    
    for item in products:
        pid = item["product_id"]
        if pid not in seen_ids:
            seen_ids.add(pid)
            # Try to get product details via search
            results = search_product(token, "", locale=locale)
            # Note: search requires a query, so we'd need product_id lookup
            # For now, just log what we have
        
        enriched.append({
            "id": item["id"],
            "date": item["date"],
            "daytime": item["daytime"],
            "amount": item["amount"],
            "serving": item["serving"],
            "product_id": item["product_id"],
            "type": item["type"],
        })
    
    output = {
        "date": date,
        "products": enriched,
        "recipe_portions": data.get("recipe_portions", []),
        "simple_products": data.get("simple_products", []),
    }
    
    print(json.dumps(output, indent=2, ensure_ascii=False))

if __name__ == "__main__":
    # Note: password needs to be passed securely — use env var or file
    import getpass
    password = getpass.getpass("YAZIO password: ")
    main()