
import requests
import json
import os

# --- Configuration ---
try:
    with open("notion_token.txt", "r") as f:
        NOTION_TOKEN = f.read().strip()
except FileNotFoundError:
    print("Error: notion_token.txt not found.")
    exit(1)

NOTION_VERSION = "2022-06-28"
NOTION_API_BASE_URL = "https://api.notion.com/v1"
HEADERS = {
    "Authorization": f"Bearer {NOTION_TOKEN}",
    "Notion-Version": NOTION_VERSION,
    "Content-Type": "application/json",
}

# DB: Personas / Roles
DB_ID = "30588f42854480c38919e22d74d945ea"

# --- Data for Archetypes ---
archetypes = [
    {
        "name": "Wirtschaftlicher Entscheider",
        "pains": [
            "Steigende Personalkosten im Reinigungs- und Servicebereich gefährden Profitabilität.",
            "Fachkräftemangel und Schwierigkeiten bei der Stellenbesetzung.",
            "Inkonsistente Qualitätsstandards schaden dem Ruf des Hauses.",
            "Hoher Managementaufwand für manuelle operative Prozesse."
        ],
        "gains": [
            "Reduktion operativer Personalkosten um 10-25%.",
            "Deutliche Abnahme der Überstunden (bis zu 50%).",
            "Sicherstellung konstant hoher Qualitätsstandards.",
            "Erhöhung der operativen Effizienz durch präzise Datenanalysen."
        ],
        "kpis": "Betriebskosten pro Einheit, Gästezufriedenheit (NPS), Mitarbeiterfluktuation.",
        "positions": "Direktor, Geschäftsführer, C-Level, Einkaufsleiter."
    },
    {
        "name": "Operativer Entscheider",
        "pains": [
            "Team ist überlastet und gestresst (Gefahr hoher Fluktuation).",
            "Zu viele manuelle Routineaufgaben wie Abräumen oder Materialtransport.",
            "Mangelnde Personalverfügbarkeit in Stoßzeiten führt zu Engpässen."
        ],
        "gains": [
            "Signifikante Entlastung des Personals von Routineaufgaben (20-40% Zeitgewinn).",
            "Garantierte Reinigungszyklen unabhängig von Personalausfällen.",
            "Mehr Zeit für wertschöpfende Aufgaben (Gästebetreuung, Upselling)."
        ],
        "kpis": "Zeitaufwand für Routineaufgaben, Abdeckungsrate der Zyklen, Servicegeschwindigkeit.",
        "positions": "Leiter Housekeeping, F&B Manager, Restaurantleiter, Stationsleitung."
    },
    {
        "name": "Infrastruktur-Verantwortlicher",
        "pains": [
            "Technische Komplexität der Integration in bestehende Infrastruktur (Aufzüge, WLAN).",
            "Sorge vor hohen Ausfallzeiten und unplanmäßigen Wartungskosten.",
            "Fehlendes internes Fachpersonal für die Wartung autonomer Systeme."
        ],
        "gains": [
            "Reibungslose Integration (20-30% schnellere Implementierung).",
            "Minimierung von Ausfallzeiten um 80-90% durch proaktives Monitoring.",
            "Planbare Wartung und transparente Kosten durch feste SLAs."
        ],
        "kpis": "System-Uptime, Implementierungszeit, Wartungskosten (TCO).",
        "positions": "Technischer Leiter, Facility Manager, IT-Leiter."
    },
    {
        "name": "Innovations-Treiber",
        "pains": [
            "Verlust der Wettbewerbsfähigkeit durch veraltete Prozesse.",
            "Schwierigkeit das Unternehmen als modernen Arbeitgeber zu positionieren.",
            "Statische Informations- und Marketingflächen werden oft ignoriert."
        ],
        "gains": [
            "Positionierung als Innovationsführer am Markt.",
            "Steigerung der Kundeninteraktion um 20-30%.",
            "Gewinnung wertvoller Daten zur kontinuierlichen Prozessoptimierung.",
            "Erhöhte Attraktivität für junge, technikaffine Talente."
        ],
        "kpis": "Besucherinteraktionsrate, Anzahl Prozessinnovationen, Modernitäts-Sentiment.",
        "positions": "Marketingleiter, Center Manager, CDO, Business Development."
    }
]

# --- Helper Functions ---

def format_rich_text(text):
    return {"rich_text": [{"type": "text", "text": {"content": text}}]}

def format_title(text):
    return {"title": [{"type": "text", "text": {"content": text}}]}

def find_page(title):
    url = f"{NOTION_API_BASE_URL}/databases/{DB_ID}/query"
    payload = {
        "filter": {
            "property": "Role",
            "title": {"equals": title}
        }
    }
    resp = requests.post(url, headers=HEADERS, json=payload)
    resp.raise_for_status()
    results = resp.json().get("results")
    return results[0] if results else None

def create_page(properties):
    url = f"{NOTION_API_BASE_URL}/pages"
    payload = {
        "parent": {"database_id": DB_ID},
        "properties": properties
    }
    resp = requests.post(url, headers=HEADERS, json=payload)
    resp.raise_for_status()
    print("Created.")

def update_page(page_id, properties):
    url = f"{NOTION_API_BASE_URL}/pages/{page_id}"
    payload = {"properties": properties}
    resp = requests.patch(url, headers=HEADERS, json=payload)
    resp.raise_for_status()
    print("Updated.")

# --- Main Logic ---

def main():
    print(f"Syncing {len(archetypes)} Personas to Notion DB {DB_ID}...")
    
    for p in archetypes:
        print(f"Processing '{p['name']}'...")
        
        pains_text = "\n".join([f"- {item}" for item in p["pains"]])
        gains_text = "\n".join([f"- {item}" for item in p["gains"]])
        
        properties = {
            "Role": format_title(p["name"]),
            "Pains": format_rich_text(pains_text),
            "Gains": format_rich_text(gains_text),
            "KPIs": format_rich_text(p.get("kpis", "")),
            "Typische Positionen": format_rich_text(p.get("positions", ""))
        }
        
        existing_page = find_page(p["name"])
        
        if existing_page:
            print(f"  -> Found existing page {existing_page['id']}. Updating...")
            update_page(existing_page["id"], properties)
        else:
            print("  -> Creating new page...")
            create_page(properties)

    print("Sync complete.")

if __name__ == "__main__":
    main()
