import logging
import json
import asyncio
import nest_asyncio

from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
from telegram.ext import Application, CommandHandler, CallbackQueryHandler, ContextTypes

# Aplica nest_asyncio para evitar problemas con el event loop
nest_asyncio.apply()

# Configuración del logging
logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    level=logging.INFO
)
logger = logging.getLogger(__name__)

# Mensaje de bienvenida con emojis
WELCOME_MESSAGE = (
    "👋 *Bienvenidos a La Enredadera*\n\n"
    "🏠 Un centro social ubicado en *Tetuán, Madrid* 📍, en la Calle de la Coruña 5.\n\n"
    "🤝 En La Enredadera trabajamos por la igualdad, el respeto y la solidaridad, "
    "rechazando categóricamente la homofobia, la transfobia, la xenofobia y cualquier forma de discriminación. \n\n"
    "💬 Aquí fomentamos la participación, el diálogo y la defensa de los derechos de todas las personas.\n\n"
    "👉 *Selecciona una opción para saber más:*"
)

# Textos de respuesta para cada opción, con emojis añadidos
NUEVOS_COLECTIVOS = (
    "📢 *NUEVOS COLECTIVOS*\n\n"
    "📝 *Presentación:*\n"
    "• Cómo se llama el proyecto/colectivo\n"
    "• De qué tipo es (colectivo/asociación, etc.)\n"
    "• Cuántas personas sois. (Abierto/Cerrado)\n"
    "• Desde cuándo funcionáis\n\n"
    "💡 *Valores y política:*\n"
    "• Cuáles son los objetivos\n"
    "• Valores y principios\n"
    "• Cómo funcionáis internamente (asambleas, consensos, votación, líder…)\n"
    "• ¿Estáis en conexión con alguna red/iniciativa/colectivo?\n\n"
    "🚚 *Logística:*\n"
    "• Actividad que queréis realizar\n"
    "• Qué necesidades tenéis (material, espacio, etc.)\n"
    "• Cuándo lo queréis realizar y cada cuánto\n\n"
    "🤝 *Compromisos con la Enre:*\n"
    "• Asistencia obligatoria a la asamblea de la Enre (todos los lunes a las 20:00)\n"
    "• Limpieza del espacio una vez al mes 🧹\n"
    "• Bienvenida a externos (todos los lunes de 19:00-20:00)\n"
    "• Organización de una Kafeta Enre cada 3-4 meses\n"
    "• Apoyo a otros colectivos\n"
    "• Participación en el grupo de Telegram “Enredando colectives”\n"
    "• Gestión de llaves de la Enre para necesidades puntuales 🔑\n\n"
    "🚫 *Líneas rojas en colectivos/eventos:*\n"
    "• Masculinidad exclusiva\n"
    "• No toleramos actitudes violentas, discriminatorias o de exclusión (homofobia, transfobia, xenofobia, etc.)"
)

EVENTOS_EXTERNOS = (
    "🎉 *EVENTOS EXTERNOS*\n\n"
    "👥 *Información del colectivo:*\n"
    "• Cómo se llama el colectivo\n"
    "• Líneas políticas\n"
    "• Organización interna\n"
    "• Qué aportan al espacio\n\n"
    "📅 *Información del evento:*\n"
    "• Público objetivo, aforo y si es abierto\n"
    "• Espacio y enseres necesarios\n"
    "• Evitar solapes de eventos/actividades\n"
    "• Horario (máximo hasta las 23:30)\n"
    "• Bebida y comida a cargo del evento (si es necesario, la Enre gestiona la bebida: pedidos@distribucioneslavapies.es)\n"
    "• Equipo de Scum: Contactar con Julita y tarifa de 20 € (o lo que se acuerde)\n\n"
    "⚠️ *Líneas rojas en colectivos/eventos:*\n"
    "• No a actitudes excluyentes o discriminatorias\n\n"
    "🤝 *Compromisos con la Enre:*\n"
    "• Asistencia a la asamblea previa al evento (entre las 19:00 y 20:00)\n"
    "• Turno de puerta y barra durante el evento\n"
    "• Limpieza posterior del espacio 🧼\n"
    "• Aporte del 10% de lo recaudado para la Enre\n\n"
    "🎶 *Eventos con música:*\n"
    "• Música se para a las 23:00/23:30; se debe desalojar el espacio salvo para el personal de limpieza\n"
    "• Conciertos/pinchadas en la planta baja (NO en Villa Paloma)\n"
    "• Preferencia por conciertos por la tarde para evitar molestias nocturnas\n"
    "• Respeto por los fines de semana\n\n"
    "📞 *Desde la asamblea:*\n"
    "• Contacto Enre: Persona asignada para confirmar y coordinar el evento\n"
    "• Madrina: Acompaña y coordina el evento, se asigna dos semanas antes\n"
    "• Protocolo policial a entregar y mediación en el evento\n"
    "• Valoración posterior del evento"
)

KAFETAS_ENRE = (
    "☕ *KAFETAS ENRE*\n\n"
    "🎯 *Objetivo:*\n"
    "• Punto de encuentro entre colectivos\n"
    "• Recaudar fondos para el espacio\n\n"
    "🔄 *Funcionamiento:*\n"
    "• Bebida a cargo de la Enre, verificación de cantidad por el colectivo\n"
    "• Recaudación destinada a la Enre\n"
    "• Organización conjunta entre colectivos\n"
    "• Posible presencia de comida, según recursos disponibles\n"
    "• Frecuencia: Dos kafetas al mes\n\n"
    "🛠 *Tareas durante la kafeta:*\n"
    "• Turno de puerta\n"
    "• Turno de barra\n"
    "• Limpieza posterior del espacio 🧽"
)

# TABLA DE LIMPIEZA EN MARKDOWN
CUADRANTE_LIMPIEZA = (
    "*🧹 Cuadrante de Limpieza Semanal*\n\n"
    "```\n"
    "| Espacio                | Semana 1     | Semana 2     | Semana 3             | Semana 4            |\n"
    "|------------------------|--------------|--------------|----------------------|---------------------|\n"
    "| Planta Baja            | Feminismos   | Kamanchaka   | Warawas + F.L.O.R    | Autodefensa         |\n"
    "| Villa Paloma           | OVT          | F.F.F        | Circo                | Hacklab             |\n"
    "| Planta 2 (Escalera)    | Enrefugio    | Yoga         | Asamblea             | Fermentos + hongos  |\n"
    "```"
)

def get_main_menu():
    """Devuelve el teclado principal con las 4 opciones."""
    keyboard = [
        [InlineKeyboardButton("NUEVOS COLECTIVOS 📢", callback_data='nuevos_colectivos')],
        [InlineKeyboardButton("EVENTOS EXTERNOS 🎉", callback_data='eventos_externos')],
        [InlineKeyboardButton("KAFETAS ENRE ☕", callback_data='kafetas_enre')],
        [InlineKeyboardButton("CUADRANTE LIMPIEZA 🧹", callback_data='cuadrante_limpieza')]
    ]
    return InlineKeyboardMarkup(keyboard)

def get_back_menu():
    """Devuelve un teclado con el botón para volver al menú principal."""
    keyboard = [
        [InlineKeyboardButton("🔙 Volver al menú", callback_data='volver')]
    ]
    return InlineKeyboardMarkup(keyboard)

async def info(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    # Comando /info que muestra la bienvenida y el menú principal
    if update.message:
        await update.message.reply_text(
            WELCOME_MESSAGE,
            parse_mode='Markdown',
            reply_markup=get_main_menu()
        )

async def button(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    query = update.callback_query
    await query.answer()

    # Si el usuario pulsa "volver", se muestra el menú principal nuevamente
    if query.data == 'volver':
        await query.edit_message_text(
            text=WELCOME_MESSAGE,
            parse_mode='Markdown',
            reply_markup=get_main_menu()
        )
        return

    # Selecciona el contenido según la opción elegida
    if query.data == 'nuevos_colectivos':
        texto = NUEVOS_COLECTIVOS
    elif query.data == 'eventos_externos':
        texto = EVENTOS_EXTERNOS
    elif query.data == 'kafetas_enre':
        texto = KAFETAS_ENRE
    elif query.data == 'cuadrante_limpieza':
        texto = CUADRANTE_LIMPIEZA
    else:
        texto = "❓ Opción no reconocida."

    # Muestra el contenido seleccionado junto con el botón para volver
    await query.edit_message_text(
        text=texto,
        parse_mode='Markdown',
        reply_markup=get_back_menu()
    )

async def main() -> None:
    # Cargar el token desde config.json
    with open('config.json', 'r') as config_file:
        config = json.load(config_file)
    token = config.get("TOKEN")
    if not token:
        logger.error("El token no se ha encontrado en el archivo config.json")
        return

    application = Application.builder().token(token).build()

    # Se registra el comando /info en lugar de /start
    application.add_handler(CommandHandler('info', info))
    application.add_handler(CallbackQueryHandler(button))

    await application.run_polling()

if __name__ == '__main__':
    asyncio.run(main())

