#!/usr/bin/env python3
"""
Importa alias-matrix.json a Airtable 2.0 como tabla "Module Aliases".
- Crea la tabla si no existe (via Metadata API)
- Popula con 94 registros: Unique_ID, Module_Slug, Industry_Slug, Alias, Pitch

Uso: python3 scripts/import-alias-matrix.py [--dry-run]
"""

import json, sys, time, urllib.request, urllib.error

DRY_RUN = "--dry-run" in sys.argv

TOKEN    = "patUFXGCZ4lEcCQDx.88ed15dafa2a89c89d70b405bb86f97fdb9e097737ed5e5b0b3c33b252de51cb"
NEW_BASE = "appRxvpzqCmNsw2JN"

def api_request(url, method="GET", body=None):
    data = json.dumps(body).encode() if body else None
    req = urllib.request.Request(url, data=data, method=method,
        headers={
            "Authorization": f"Bearer {TOKEN}",
            "Content-Type": "application/json",
        })
    try:
        with urllib.request.urlopen(req) as resp:
            return json.loads(resp.read()), None
    except urllib.error.HTTPError as e:
        return None, f"HTTP {e.code}: {e.read().decode()}"

# ── Load alias matrix ─────────────────────────────────────────
with open("database/seeders/products/alias-matrix.json") as f:
    matrix = json.load(f)

# Build flat list of records (skip _meta key)
records_to_create = []
for module_slug, industries in matrix.items():
    if module_slug.startswith("_"):
        continue
    for industry_slug, data in industries.items():
        alias = data.get("alias", "")
        pitch = data.get("pitch", "")
        if alias:
            records_to_create.append({
                "Unique_ID":     f"{module_slug}-{industry_slug}",
                "Module_Slug":   module_slug,
                "Industry_Slug": industry_slug,
                "Alias":         alias,
                "Pitch":         pitch,
            })

print(f"Alias combinations en alias-matrix.json: {len(records_to_create)}")

if DRY_RUN:
    print("\nDRY RUN — primeros 10:")
    for r in records_to_create[:10]:
        print(f"  {r['Unique_ID']:40s} → {r['Alias']}")
    print(f"\nTotal: {len(records_to_create)} registros a crear")
    sys.exit(0)

# ── Get or create Module Aliases table ───────────────────────
print("\nVerificando tabla Module Aliases en 2.0...")
data, err = api_request(f"https://api.airtable.com/v0/meta/bases/{NEW_BASE}/tables")
if err:
    print(f"ERROR fetching tables: {err}")
    sys.exit(1)

tables = data.get("tables", [])
alias_table_id = None
for t in tables:
    if t["name"] == "Module Aliases":
        alias_table_id = t["id"]
        break

if alias_table_id:
    print(f"  → Tabla existente: {alias_table_id}")
else:
    print("  → Creando tabla Module Aliases...")
    create_body = {
        "name": "Module Aliases",
        "fields": [
            {"name": "Unique_ID",     "type": "singleLineText"},
            {"name": "Module_Slug",   "type": "singleLineText"},
            {"name": "Industry_Slug", "type": "singleLineText"},
            {"name": "Alias",         "type": "singleLineText"},
            {"name": "Pitch",         "type": "multilineText"},
        ]
    }
    result, err = api_request(
        f"https://api.airtable.com/v0/meta/bases/{NEW_BASE}/tables",
        method="POST",
        body=create_body
    )
    if err:
        print(f"  ERROR creando tabla: {err}")
        sys.exit(1)
    alias_table_id = result["id"]
    print(f"  → Tabla creada: {alias_table_id}")
    time.sleep(1)

# ── Check existing records ─────────────────────────────────────
print("\nVerificando registros existentes...")
existing_ids = set()
offset = None
while True:
    url = f"https://api.airtable.com/v0/{NEW_BASE}/{alias_table_id}?maxRecords=200"
    if offset:
        url += f"&offset={urllib.parse.quote(offset)}"
    resp, err = api_request(url)
    if err:
        break
    for r in resp.get("records", []):
        uid = r.get("fields", {}).get("Unique_ID", "")
        if uid:
            existing_ids.add(uid)
    offset = resp.get("offset")
    if not offset:
        break

import urllib.parse
print(f"  → {len(existing_ids)} registros ya en Airtable")

missing = [r for r in records_to_create if r["Unique_ID"] not in existing_ids]
print(f"  → {len(missing)} a crear")

if not missing:
    print("Nada que crear.")
    sys.exit(0)

# ── Create in batches of 10 ───────────────────────────────────
def batch(lst, n):
    for i in range(0, len(lst), n):
        yield lst[i:i+n]

created = 0
failed = []

print(f"\nCreando {len(missing)} Module Aliases...")
for chunk in batch(missing, 10):
    records = [{"fields": r} for r in chunk]
    url = f"https://api.airtable.com/v0/{NEW_BASE}/{alias_table_id}"
    body = {"records": records}
    result, err = api_request(url, method="POST", body=body)
    if err:
        print(f"  ERROR batch: {err}")
        failed.extend([r["Unique_ID"] for r in chunk])
    else:
        created += len(result.get("records", []))
        print(f"  ✓ +{len(result.get('records', []))} ({chunk[0]['Unique_ID']} … {chunk[-1]['Unique_ID']})")
    time.sleep(0.3)

print(f"\n✅ Done! Module Aliases creados: {created}/{len(missing)}")
if failed:
    print(f"   Fallidos: {failed}")
