#!/usr/bin/env python3
"""
Genera conversion copy para los 13 core presets faltantes en Products Copy.
Usa los 8 existentes como few-shot + alias-matrix + core JSONs como contexto.

Output: database/seeders/products/core-products-copy.json
        {core_slug: {tagline, headline, target_persona, pain_points, value_props, cta_primary, cta_secondary}}

Uso: python3 scripts/generate-core-copy.py [--dry-run]
"""

import json, os, sys, re, urllib.request

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

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

with open("docs/airtable-backup/bewpro-old/products-copy-strategic.json") as f:
    EXISTING_COPY = json.load(f)

CORE_FILES = {}
for fn in os.listdir("database/seeders/products/core"):
    if fn.endswith(".json") and fn != "seeds":
        slug = fn.replace(".json", "")
        with open(f"database/seeders/products/core/{fn}") as f:
            CORE_FILES[slug] = json.load(f)

CORE_TO_INDUSTRY = {
    "insurance-advisor":     "health-medical",
    "nutritionist":          "health-medical",
    "law-firm-digital":      "law-corporate",
    "real-estate":           "real-estate",
    "financial-wealth":      "finance",
    "restaurant-bar":        "retail-gastro",
    "concierge":             "retail-gastro",
    "photography":           "art-design",
    "art-design":            "art-design",
    "personal-brand":        "personal",
    "foundations-ong":       "institutional",
    "agency":                "tech-saas",
    "website-reseller":      "tech-saas",
    "business-catalogue":    "retail-gastro",
    "catalogue-ai":          "retail-gastro",
    "construction":          "art-design",
    "corporative":           "institutional",
    "standard-website":      "institutional",
    "bp-dinamic":            "personal",
    "petite-website":        "personal",
    "sitio-web-profesional": "institutional",
}

MISSING_CORES = [
    "agency", "art-design", "bp-dinamic", "catalogue-ai", "concierge",
    "corporative", "financial-wealth", "foundations-ong", "nutritionist",
    "petite-website", "sitio-web-profesional", "standard-website", "website-reseller"
]

# ── Build context for each missing core ──────────────────────
def get_module_aliases(modules, industry):
    aliases = []
    for mod in modules:
        mod_data = MATRIX.get(mod, {})
        alias = mod_data.get(industry, {}).get("alias")
        pitch = mod_data.get(industry, {}).get("pitch", "")
        if alias:
            aliases.append({"module": mod, "alias": alias, "pitch": pitch})
    return aliases

cores_context = {}
for slug in MISSING_CORES:
    core = CORE_FILES.get(slug, {})
    industry = CORE_TO_INDUSTRY.get(slug, "institutional")
    modules = core.get("modules", [])
    aliases = get_module_aliases(modules, industry)
    cores_context[slug] = {
        "demo": core.get("demo", ""),
        "modules": modules,
        "industry": industry,
        "aliases": aliases,
    }

if DRY_RUN:
    print("Missing cores to generate:")
    for slug, ctx in cores_context.items():
        print(f"  {slug}: industry={ctx['industry']}, modules={ctx['modules']}")
        for a in ctx["aliases"]:
            print(f"    → {a['alias']}: {a['pitch'][:60]}")
    sys.exit(0)

# ── Load Anthropic API key ────────────────────────────────────
anthropic_key = None
if os.path.exists(".env"):
    with open(".env") as ef:
        for line in ef:
            if line.startswith("ANTHROPIC_API_KEY="):
                anthropic_key = line.split("=", 1)[1].strip().strip('"\'')
if not anthropic_key:
    anthropic_key = os.environ.get("ANTHROPIC_API_KEY")
if not anthropic_key:
    print("ERROR: ANTHROPIC_API_KEY no encontrada")
    sys.exit(1)

# ── Build few-shot examples from existing 8 ──────────────────
few_shot = json.dumps(EXISTING_COPY, ensure_ascii=False, indent=2)

# ── Build cores context for prompt ───────────────────────────
cores_for_prompt = {}
for slug, ctx in cores_context.items():
    cores_for_prompt[slug] = {
        "industry": ctx["industry"],
        "modules_with_aliases": [
            f"{a['module']} → \"{a['alias']}\": {a['pitch']}"
            for a in ctx["aliases"]
        ]
    }

prompt = f"""Sos el estratega de producto de BewPro, una plataforma SaaS de sitios web modulares para Latinoamérica.

BewPro vende productos simples, económicos, directos y efectivos. El target son PyMEs, profesionales y emprendedores que necesitan presencia digital profesional sin complicaciones técnicas.

Tenés que generar conversion copy para la página de producto de 13 core presets que faltan.

## Ejemplos de referencia (los 8 ya escritos, en español latinoamericano):

{few_shot}

## Los 13 cores que necesitás generar:

{json.dumps(cores_for_prompt, ensure_ascii=False, indent=2)}

## Reglas:
1. **Tagline**: gancho corto, 4-7 palabras, impacto inmediato. Ej: "Tu web lista en 48hs"
2. **Headline**: H1 de la página de producto, 8-12 palabras. Habla del beneficio principal, no de features.
3. **Target_Persona**: 1-2 frases describiendo exactamente a quién le habla este producto. Específico y detallado.
4. **Pain_Points**: 3-4 problemas reales separados por " / ". Deben resonar con el target_persona.
5. **Value_Props**: 3-4 propuestas de valor separadas por " / ". Conectan módulos con beneficios reales.
6. **CTA_Primary**: texto del botón principal. Acción concreta. Ej: "Ver demo", "Quiero mi web"
7. **CTA_Secondary**: UNO de estos valores exactos (sin inventar otros):
   "Hablemos de tu proyecto" | "Contactar" | "Hablar con nosotros" | "Contactarme" | "Hablemos"
8. Idioma: español latinoamericano. Tono: directo, confiable, sin tecnicismos.
9. Los Value_Props deben mencionar los aliases de módulos (no los slugs técnicos).

Devolvé SOLO un JSON válido con esta estructura exacta:
{{
  "core-slug": {{
    "Tagline": "...",
    "Headline": "...",
    "Target_Persona": "...",
    "Pain_Points": "... / ... / ...",
    "Value_Props": "... / ... / ...",
    "CTA_Primary": "...",
    "CTA_Secondary": "..."
  }}
}}

Incluí los 13 cores. Nada más que el JSON.
"""

print(f"Generando copy para {len(MISSING_CORES)} cores con Claude...")

request_body = json.dumps({
    "model": "claude-opus-4-6",
    "max_tokens": 6000,
    "messages": [{"role": "user", "content": prompt}]
}).encode()

req = urllib.request.Request(
    "https://api.anthropic.com/v1/messages",
    data=request_body,
    headers={
        "x-api-key": anthropic_key,
        "anthropic-version": "2023-06-01",
        "content-type": "application/json",
    }
)

with urllib.request.urlopen(req) as resp:
    result = json.loads(resp.read())

raw_text = result["content"][0]["text"].strip()

# Extract JSON
json_match = re.search(r'\{[\s\S]+\}', raw_text)
if not json_match:
    print("ERROR: No se pudo extraer JSON")
    print(raw_text[:500])
    sys.exit(1)

generated = json.loads(json_match.group())
print(f"✅ Claude generó copy para {len(generated)} cores")

# ── Merge with existing 8 ────────────────────────────────────
# Normalize keys in existing copy to match Airtable field names
final = {}
for slug, data in EXISTING_COPY.items():
    final[slug] = data

for slug, data in generated.items():
    final[slug] = data

# Save
out_path = "database/seeders/products/core-products-copy.json"
with open(out_path, "w", encoding="utf-8") as f:
    json.dump(final, f, ensure_ascii=False, indent=2)

print(f"\n✅ core-products-copy.json guardado: {len(final)}/21 cores")
print(f"   Existentes: {len(EXISTING_COPY)} | Generados: {len(generated)}")
print(f"   Archivo: {out_path}")
print()
for slug in sorted(final.keys()):
    tagline = final[slug].get("Tagline", final[slug].get("tagline", ""))
    print(f"  {slug:25s} → {tagline}")
