"""
Script para cargar un producto al catálogo del bot.

Uso:
    python add_producto.py

Flujo real de trabajo:
1. Encontrás una buena oferta en Mercado Libre.
2. Generás el link de afiliado a mano desde la Central de Afiliados
   (mercadolibre.com -> tu perfil -> Afiliados) - es 1 clic.
3. Corrés este script y pegás los datos acá.
"""
import re

import database as db
import telegram_client as tg
from config import TELEGRAM_CANAL_ID

PATRON_ITEM_ID = re.compile(r"(MLA|MLB|MLC|MLM|MLU|MLV|MCO)-?(\d{6,12})", re.IGNORECASE)
BOTON_CATALOGO = {"text": "🛍️ Ver catálogo completo", "url": "https://t.me/MundoWao_bot?start=canal"}


def publicar_nuevo_en_canal(producto_id, titulo, precio, link_afiliado, imagen_url=None):
    if not TELEGRAM_CANAL_ID:
        return
    precio_formateado = f"{precio:,.0f}".replace(",", ".")
    texto = (
        f"🆕 <b>{titulo}</b>\n"
        f"💰 ${precio_formateado}"
    )
    teclado = {"inline_keyboard": [[{"text": "🛍️ Ver oferta", "url": link_afiliado}], [BOTON_CATALOGO]]}
    try:
        if imagen_url:
            respuesta = tg.enviar_foto(TELEGRAM_CANAL_ID, imagen_url, texto, teclado=teclado)
        else:
            respuesta = tg.enviar_mensaje(TELEGRAM_CANAL_ID, texto, teclado=teclado)
        db.guardar_canal_message_id_producto(producto_id, respuesta["result"]["message_id"])
    except Exception as e:
        print(f"(no se pudo publicar en el canal: {e})")

db.init_db()

print("=== Agregar producto al catálogo ===\n")

categorias = db.listar_todas_categorias()
if not categorias:
    print("No hay categorías creadas todavía. Agregá una desde el panel (categorias.php) antes de cargar productos.")
    raise SystemExit

print("Categorías disponibles:")
for i, c in enumerate(categorias, start=1):
    print(f"  {i}. {c['nombre']}")
seleccion = input("Elige el número de categoría: ").strip()
try:
    categoria_id = categorias[int(seleccion) - 1]["id"]
except (ValueError, IndexError):
    print("Selección inválida.")
    raise SystemExit

titulo = input("Título del producto: ").strip()
precio = float(input("Precio (solo número, ej: 15990): ").strip())
link_afiliado = input("Link de afiliado (ya generado en el panel de ML): ").strip()
imagen_url = input("URL de imagen (opcional, Enter para omitir): ").strip() or None
url_producto = input(
    "Link de la página del producto en ML, NO el de afiliado (opcional, para "
    "verificar precio/disponibilidad automáticamente): "
).strip()

ml_item_id = None
if url_producto:
    match = PATRON_ITEM_ID.search(url_producto)
    if match:
        ml_item_id = f"{match.group(1).upper()}{match.group(2)}"
    else:
        print("(no encontré un ID de Mercado Libre ahí, lo dejo sin completar)")

producto_id = db.agregar_producto(titulo, precio, categoria_id, link_afiliado, imagen_url, ml_item_id, url_producto or None)
print(f"\n✅ Producto agregado con ID {producto_id}")

publicar_nuevo_en_canal(producto_id, titulo, precio, link_afiliado, imagen_url)
print("📢 Publicado en el canal." if TELEGRAM_CANAL_ID else "📢 Canal no configurado, no se publicó.")
