#!/usr/bin/env python3
"""
Migración: Créditos → Horas
Divide todos los valores existentes de class_credits.amount y classes.duration_credits por 4.
(1 crédito = 15 min → 4 créditos = 1 hora → se pasa a almacenar directamente en horas)

Ejecutar UNA SOLA VEZ antes de usar el nuevo sistema de horas.
"""

import json
import sys
import urllib.request
import urllib.parse

PB_URL = "https://db.kingsandqueens.com.ar"

def pb_auth(email, password):
    url = f"{PB_URL}/api/collections/users/auth-with-password"
    data = json.dumps({"identity": email, "password": password}).encode()
    req = urllib.request.Request(url, data=data, headers={"Content-Type": "application/json"})
    with urllib.request.urlopen(req) as r:
        return json.loads(r.read())["token"]

def pb_get_all(token, collection, filters=""):
    items = []
    page = 1
    while True:
        params = urllib.parse.urlencode({"page": page, "perPage": 200, "filter": filters})
        url = f"{PB_URL}/api/collections/{collection}/records?{params}"
        req = urllib.request.Request(url, headers={"Authorization": token})
        with urllib.request.urlopen(req) as r:
            data = json.loads(r.read())
        items.extend(data["items"])
        if page >= data["totalPages"]:
            break
        page += 1
    return items

def pb_update(token, collection, record_id, body):
    url = f"{PB_URL}/api/collections/{collection}/records/{record_id}"
    data = json.dumps(body).encode()
    req = urllib.request.Request(
        url, data=data,
        headers={"Content-Type": "application/json", "Authorization": token},
        method="PATCH"
    )
    with urllib.request.urlopen(req) as r:
        return json.loads(r.read())

def main():
    print("=== Migración Créditos → Horas ===\n")

    email = input("Admin email: ").strip()
    password = input("Admin password: ").strip()

    print("\nAutenticando...")
    token = pb_auth(email, password)
    print("OK\n")

    # — Migrar class_credits.amount —
    print("Cargando class_credits...")
    credits = pb_get_all(token, "class_credits")
    print(f"  {len(credits)} registros encontrados.")

    migrated_credits = 0
    for c in credits:
        old_amount = float(c.get("amount", 0))
        if old_amount <= 0:
            continue
        new_amount = round(old_amount / 4, 4)
        pb_update(token, "class_credits", c["id"], {"amount": new_amount})
        migrated_credits += 1
        print(f"  [{c['type']}] {c.get('description','')[:40]:40s} {old_amount:6.1f} → {new_amount:.2f} hs")

    print(f"\n  Migrados: {migrated_credits} registros de class_credits.\n")

    # — Migrar classes.duration_credits —
    print("Cargando classes...")
    classes = pb_get_all(token, "classes")
    print(f"  {len(classes)} registros encontrados.")

    migrated_classes = 0
    for c in classes:
        old_dur = float(c.get("duration_credits", 0))
        if old_dur <= 0:
            continue
        new_dur = round(old_dur / 4, 4)
        pb_update(token, "classes", c["id"], {"duration_credits": new_dur})
        migrated_classes += 1
        print(f"  {c.get('title','')[:40]:40s} {old_dur:6.1f} → {new_dur:.2f} hs")

    print(f"\n  Migradas: {migrated_classes} clases.\n")
    print("=== Migración completa ===")
    print(f"  class_credits: {migrated_credits} registros convertidos")
    print(f"  classes:       {migrated_classes} registros convertidos")

if __name__ == "__main__":
    main()
