import os
import gc
import torch
import subprocess
import random
from diffusers import StableDiffusionPipeline

# --- CONFIGURACIÓN DE RUTAS Y MARCA ---
MARCA = "Amelia Laroye"
URL_BASE = "https://amelialaroye.net"
WHATSAPP = "34600000000"  # Sustituir por el real
DIRECTORIO_SALIDA = os.path.expanduser("~/Crisostomo_bridge/sedes_clientes")
DIR_ASSETS = os.path.join(DIRECTORIO_SALIDA, "assets")

# --- LISTA DE CIUDADES ---
CIUDADES = [
    {"nombre": "Madrid", "pais": "España"},
    {"nombre": "Sevilla", "pais": "España"},
    {"nombre": "Ciudad de México", "pais": "México"},
    {"nombre": "Monterrey", "pais": "México"},
    {"nombre": "Bogotá", "pais": "Colombia"}
]

# --- PERFILES DE LOS DOS TEMPLOS ---
TEMPLOS = [
    {
        "subpath": "tarot-oraculo",
        "tipo": "Santería Brasileña",
        "prompt_texto": (
            "Eres Amelia Laroye, maestra de la alta videncia. Escribe una presentación magistral "
            "de 450 palabras para tu sede en {ciudad}. Enfócate en la 'Santería Brasileña' "
            "como una filosofía de sabiduría ancestral y técnica de adivinación de élite. "
            "Habla de la precisión de tus lecturas de Tarot y de la profundidad espiritual de esta tradición. "
            "Mantén un tono elegante, misterioso y profesional, posicionando esta sabiduría como la "
            "llave de todas las respuestas."
        ),
        "prompt_img": (
            "High-end professional photography, extreme realism. A master tarot reader's desk. "
            "Ancient tarot cards spread on an altar with white embroidered linen. "
            "No religious statues, no deities. Focus on crystals, incense smoke, "
            "and soft candlelight. Cinematic lighting, 8k resolution, documentary style."
        ),
        "color_accent": "#d4af37"
    },
    {
        "subpath": "rituales-poder",
        "tipo": "Alta Magia y Rituales",
        "prompt_texto": (
            "Eres Amelia Laroye. Escribe una proclama de poder de 450 palabras para rituales en {ciudad}. "
            "Habla con autoridad de Quimbanda, Exú y Pombagira para abrir caminos de amor y dinero. "
            "Menciona la protección de la Santa Muerte para casos imposibles. Usa términos como Laroyé y Axé. "
            "Tono oscuro, protector y muy poderoso."
        ),
        "prompt_img": (
            "Cinematic realistic photography. Quimbanda ritual altar. Dark red and black atmosphere. "
            "Presence of an iron trident, red roses, and a cigar with thick smoke. "
            "Shadowy figure of a Pombagira with a red dress and lace. "
            "Exu silhouette in the background. No Santa Muerte, no skulls. "
            "Hyper-realistic textures, dramatic chiaroscuro, 8k resolution."
        ),
        "color_accent": "#8b0000"
    }
]

# --- MOTOR DE IMAGEN ---
def inicializar_motor():
    print("† Consagrando motor de visiones (Dreamshaper-8)...")
    pipeline = StableDiffusionPipeline.from_pretrained(
        "Lykon/dreamshaper-8", torch_dtype=torch.float32
    ).to("cpu")
    return pipeline

def generar_imagen_profesional(pipeline, ciudad, prompt_visual):
    slug = ciudad.lower().replace(" ", "_")
    nombre_img = f"vision_{slug}_{random.randint(100,999)}.png"
    path_img = os.path.join(DIR_ASSETS, nombre_img)
    # Refuerzo del escudo negativo para evitar mezclas no deseadas
    neg_prompt = "cartoon, anime, plastic, blurry, low quality, deformed, robotic, Santa Muerte, skull, skeleton, cross, christianity, bad anatomy, text, watermark"
    
    print(f"🎨 Esculpiendo imagen para {ciudad}...")
    image = pipeline(prompt_visual, negative_prompt=neg_prompt, num_inference_steps=35).images[0]
    image.save(path_img)
    return nombre_img

# --- MOTOR DE TEXTO ---
def generar_texto_extenso(ciudad, prompt_base):
    print(f"✍️  Redactando contenido para {ciudad}...")
    try:
        resultado = subprocess.run(
            ["ollama", "run", "Crisostomo:latest", prompt_base.format(ciudad=ciudad)],
            capture_output=True, text=True, encoding='utf-8', timeout=500
        )
        return resultado.stdout.strip()
    except:
        return "La sabiduría de la Santería Brasileña te espera en esta encrucijada del destino."

# --- CONSTRUCTOR HTML ---
def crear_html(ciudad, templo, texto, img_name, pais):
    slug_ciudad = ciudad.lower().replace(" ", "-")
    ruta_final = os.path.join(DIRECTORIO_SALIDA, slug_ciudad, templo['subpath'])
    os.makedirs(ruta_final, exist_ok=True)
    
    otro_templo = TEMPLOS[1] if templo['subpath'] == "tarot-oraculo" else TEMPLOS[0]
    enlace_otro = f"../../{slug_ciudad}/{otro_templo['subpath']}/"
    texto_otro = f"Ver {otro_templo['tipo']} en {ciudad}"

    msg_wa = f"Hola Amelia, te contacto desde la sede de {ciudad} para una consulta de {templo['tipo']}."
    link_wa = f"https://wa.me/{WHATSAPP}?text={msg_wa.replace(' ', '%20')}"
    
    html = f"""
    <!DOCTYPE html>
    <html lang="es">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>{templo['tipo']} en {ciudad} | {MARCA}</title>
        <link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;700&family=Lora:ital@1&display=swap" rel="stylesheet">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
        <style>
            body {{ background: #050505; color: #f4e4bc; font-family: 'Lora', serif; margin: 0; line-height: 1.8; }}
            .header {{ padding: 60px 20px; text-align: center; border-bottom: 1px solid {templo['color_accent']}33; }}
            h1 {{ font-family: 'Cinzel', serif; font-size: 2.5em; color: #fff; margin: 0; letter-spacing: 4px; }}
            .container {{ max-width: 800px; margin: auto; padding: 40px 20px; padding-bottom: 100px; }}
            .img-hero {{ width: 100%; border-radius: 4px; border: 1px solid #222; box-shadow: 0 15px 40px rgba(0,0,0,0.7); }}
            .texto-sagrado {{ font-size: 1.2em; text-align: justify; margin-top: 40px; white-space: pre-line; }}
            .texto-sagrado::first-letter {{ font-family: 'Cinzel', serif; font-size: 3.5em; float: left; margin-right: 10px; color: {templo['color_accent']}; line-height: 1; }}
            .cta-box {{ text-align: center; margin-top: 50px; padding: 40px; background: #0a0a0a; border: 1px solid {templo['color_accent']}55; }}
            .btn-wa {{ background: {templo['color_accent']}; color: #000; padding: 20px 40px; text-decoration: none; font-family: 'Cinzel', serif; font-weight: bold; display: inline-block; font-size: 1.2em; transition: 0.3s; }}
            .btn-wa:hover {{ background: #fff; transform: scale(1.05); }}
            .footer-seo {{ background: #000; padding: 60px 20px; margin-top: 80px; border-top: 1px solid #1a1a1a; font-size: 0.9em; color: #666; }}
            .footer-content {{ max-width: 800px; margin: auto; display: grid; grid-template-columns: 1fr 1fr; gap: 40px; }}
            .footer-section h4 {{ font-family: 'Cinzel', serif; color: {templo['color_accent']}; margin-bottom: 15px; }}
            .footer-section ul {{ list-style: none; padding: 0; }}
            .footer-section ul li {{ margin-bottom: 8px; }}
            .footer-section a {{ color: #888; text-decoration: none; transition: 0.3s; }}
            .footer-section a:hover {{ color: {templo['color_accent']}; }}
            .keywords {{ margin-top: 30px; text-align: center; font-style: italic; opacity: 0.4; font-size: 0.8em; line-height: 1.4; }}
            .whatsapp-float {{
                position: fixed; width: 60px; height: 60px; bottom: 30px; right: 30px;
                background-color: #25d366; color: #FFF; border-radius: 50px;
                text-align: center; font-size: 30px; box-shadow: 2px 2px 15px rgba(0,0,0,0.5);
                z-index: 1000; display: flex; align-items: center; justify-content: center;
                text-decoration: none; animation: pulse 2s infinite; transition: 0.3s;
            }}
            @keyframes pulse {{
                0% {{ box-shadow: 0 0 0 0 rgba(37, 211, 102, 0.7); }}
                70% {{ box-shadow: 0 0 0 15px rgba(37, 211, 102, 0); }}
                100% {{ box-shadow: 0 0 0 0 rgba(37, 211, 102, 0); }}
            }}
        </style>
    </head>
    <body>
        <div class="header">
            <h1>{MARCA}</h1>
            <p style="letter-spacing: 2px; color: {templo['color_accent']}">{templo['tipo'].upper()} EN {ciudad.upper()}</p>
        </div>
        <div class="container">
            <img src="../../assets/{img_name}" class="img-hero">
            <div class="texto-sagrado">{texto}</div>
            <div class="cta-box">
                <p>¿Deseas que la Maestra atienda tu caso personalmente?</p>
                <a href="{link_wa}" class="btn-wa">SOLICITAR CONSULTA</a>
            </div>
        </div>
        <footer class="footer-seo">
            <div class="footer-content">
                <div class="footer-section">
                    <h4>Servicios en {ciudad}</h4>
                    <ul>
                        <li><a href="{enlace_otro}">{texto_otro}</a></li>
                        <li>Consultas de Videncia Real</li>
                        <li>Limpiezas Espirituales Profundas</li>
                        <li>Protección contra Mal de Ojo</li>
                    </ul>
                </div>
                <div class="footer-section">
                    <h4>Nuestra Tradición</h4>
                    <ul>
                        <li>Secretos de Santería Brasileña</li>
                        <li>Quimbanda y Apertura de Caminos</li>
                        <li>Culto Sagrado a la Santa Muerte</li>
                        <li>El Axé de Amelia Laroye</li>
                    </ul>
                </div>
            </div>
            <div class="keywords">
                Amarres de Amor en {ciudad}, Santería {pais}, Vidente honesta en {ciudad}, 
                Rituales de Abundancia, Magia para el Amor, Exú y Pombagira, Santa Muerte Protección.
            </div>
            <div style="text-align: center; margin-top: 40px; font-size: 0.7em; letter-spacing: 1px;">
                © 2026 {MARCA}. Solo mayores de 18 años. El destino está en tus manos.
            </div>
        </footer>
        <a href="{link_wa}" class="whatsapp-float" target="_blank">
            <i class="fab fa-whatsapp"></i>
        </a>
    </body>
    </html>
    """
    with open(os.path.join(ruta_final, "index.html"), "w", encoding="utf-8") as f:
        f.write(html)

def generar_sitemap(urls):
    path_sitemap = os.path.join(DIRECTORIO_SALIDA, "sitemap.xml")
    with open(path_sitemap, "w", encoding="utf-8") as f:
        f.write('<?xml version="1.0" encoding="UTF-8"?>\n')
        f.write('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n')
        for url in urls:
            f.write(f'  <url><loc>{url}</loc></url>\n')
        f.write('</urlset>')
    print(f"† El Mapa del Sitio (Sitemap) ha sido consagrado en {path_sitemap}")

# --- INICIO DEL RITUAL ---
if __name__ == "__main__":
    os.makedirs(DIR_ASSETS, exist_ok=True)
    pipe = inicializar_motor()
    urls_generadas = []
    
    for c in CIUDADES:
        print(f"\n✨ CONSAGRANDO CIUDAD: {c['nombre']} ✨")
        slug_ciudad = c['nombre'].lower().replace(" ", "-")
        for t in TEMPLOS:
            txt = generar_texto_extenso(c['nombre'], t['prompt_texto'])
            img = generar_imagen_profesional(pipe, c['nombre'], t['prompt_img'])
            crear_html(c['nombre'], t, txt, img, c['pais'])
            urls_generadas.append(f"{URL_BASE}/{slug_ciudad}/{t['subpath']}/")
            
    generar_sitemap(urls_generadas)
    del pipe
    gc.collect()
    print(f"\n† Ritual Finalizado. Las sedes descansan en {DIRECTORIO_SALIDA}")