import gradio as gr
import requests

API_URL = "https://api-inference.huggingface.co/models/BSC-LT/salamandra-2b-instruct"
headers = {}

def accionar_ai(pregunta):
    prompt = f"""
Eres Accionar AI, una herramienta activista que apoya campañas sociales en América Latina.

Tu tarea es generar estrategias de campaña claras, útiles y bien estructuradas.  
Incluye al menos una acción y tres aliadas específicas en cada respuesta.

📌 Objetivo de la campaña:  
🎯 Público objetivo:  
📣 Mensaje clave:  
🚀 Acciones sugeridas:  
🤝 Posibles aliadas:

---

Ejemplo:

Usuario: Queremos lanzar una campaña contra la criminalización de la protesta feminista en México.

Respuesta:
📌 Objetivo de la campaña: Visibilizar y frenar la persecución, intimidación y criminalización de mujeres que protestan por derechos en México y América Latina.  
🎯 Público objetivo: Mujeres organizadas, activistas feministas, abogadas populares, defensoras de derechos humanos, periodistas sensibles al tema, y tomadores de decisión en instituciones públicas.  
📣 Mensaje clave: “¡No a la criminalización de la protesta feminista! Protestar no es un crimen, es un derecho.”  
🚀 Acciones sugeridas: Recolección de casos, campaña de correos a autoridades, piezas gráficas de denuncia, entrevistas con identidades protegidas.  
🤝 Posibles aliadas: Colectivas feministas locales, abogadas por la libertad, periodistas con enfoque de género, redes latinoamericanas de derechos humanos.

---

Usuario: {pregunta}

Respuesta:
"""

    payload = {
        "inputs": prompt,
        "parameters": {
            "max_new_tokens": 280,
            "temperature": 0.7,
            "top_p": 0.95
        }
    }

    response = requests.post(API_URL, headers=headers, json=payload)
    result = response.json()

    if isinstance(result, list):
        generated = result[0].get("generated_text", "").strip()

        if "Respuesta:" in generated:
            texto = generated.split("Respuesta:")[-1].strip()
        else:
            texto = generated

        # Ordenar campos
        campos = {
            "📌 Objetivo de la campaña:": "",
            "🎯 Público objetivo:": "",
            "📣 Mensaje clave:": "",
            "🚀 Acciones sugeridas:": "",
            "🤝 Posibles aliadas:": ""
        }

        campos_llenos = 0
        for line in texto.splitlines():
            for campo in campos:
                if line.startswith(campo) and len(line) > len(campo):
                    campos[campo] = line
                    campos_llenos += 1

        if campos_llenos >= 3:
            return "\n".join([campos[c] for c in campos if campos[c]])
        else:
            return texto.strip()
    else:
        return f"⚠️ Error del modelo: {result.get('error', 'respuesta no válida')}"

# 🎨 Interfaz "Accionar style"
demo = gr.Interface(
    fn=accionar_ai,
    inputs=gr.Textbox(
        lines=4, 
        label="✍️ Escribe tu idea de campaña",
        placeholder="Ejemplo: Quiero una campaña con jóvenes para prevenir el acoso digital en redes sociales."
    ),
    outputs=gr.Textbox(
        label="📢 Propuesta de campaña generada por Accionar AI",
        lines=8
    ),
    title="💥 Accionar AI Commons",
    description="""
🔮 Asistente activista para campañas sociales en América Latina.

🧭 ¿Cómo funciona?
Cuéntame tu idea y te ayudamos a transformarla en una estrategia de campaña con objetivos, acciones y posibles aliadas.

💡 Ejemplos:
- Quiero una campaña para defender el acceso al agua en zonas rurales.
- Queremos frenar los desalojos a comunidades indígenas.
- Necesitamos visibilizar la violencia digital hacia adolescentes.

🌱 Construido con inteligencia colectiva, tecnología libre y corazón latinoamericano.
    """,
    theme="soft",
    allow_flagging="never"
)

demo.launch()