"""
Postea al canal de Telegram las bajadas de precio que quedaron pendientes
desde la última vez que corrió este script.

Pensado para correr por cron a horarios fijos (ej. 8pm y 8am), no al
instante en que se edita un producto: panel/editar.php solo encola la
bajada en la tabla notificaciones_pendientes, este script es el que
efectivamente la manda y la marca como enviada.

Uso:
    python notificar_ofertas.py
"""
import database as db
import telegram_client as tg
from config import TELEGRAM_CANAL_ID

BOTON_CATALOGO = {"text": "🛍️ Ver catálogo completo", "url": "https://t.me/MundoWao_bot?start=canal"}


def armar_mensaje(oferta):
    descuento = round((1 - float(oferta["precio_nuevo"]) / float(oferta["precio_viejo"])) * 100)
    precio_viejo = f"{oferta['precio_viejo']:,.0f}".replace(",", ".")
    precio_nuevo = f"{oferta['precio_nuevo']:,.0f}".replace(",", ".")
    return (
        f"🔥 <b>{oferta['titulo']}</b> bajó de precio ({descuento}% off)\n"
        f"<s>${precio_viejo}</s> → <b>${precio_nuevo}</b>"
    )


def publicar_en_canal(oferta):
    if not TELEGRAM_CANAL_ID:
        print("    [canal] TELEGRAM_CANAL_ID no configurado, salteando.")
        return False
    texto = armar_mensaje(oferta)
    teclado = {"inline_keyboard": [[{"text": "🛍️ Ver oferta", "url": oferta["link_afiliado"]}], [BOTON_CATALOGO]]}
    try:
        if oferta.get("imagen_url"):
            respuesta = tg.enviar_foto(TELEGRAM_CANAL_ID, oferta["imagen_url"], texto, teclado=teclado)
        else:
            respuesta = tg.enviar_mensaje(TELEGRAM_CANAL_ID, texto, teclado=teclado)
        db.guardar_canal_message_id_notificacion(oferta["id"], respuesta["result"]["message_id"])
        return True
    except Exception as e:
        print(f"    [canal] no se pudo publicar: {e}")
        return False


def main():
    db.init_db()

    pendientes = db.listar_notificaciones_pendientes()
    if not pendientes:
        print("No hay ofertas nuevas para notificar.")
        return

    print(f"{len(pendientes)} oferta(s) pendiente(s).")

    for oferta in pendientes:
        print(f"[{oferta['producto_id']}] '{oferta['titulo'][:40]}' "
              f"${oferta['precio_viejo']} -> ${oferta['precio_nuevo']}")
        publicado = publicar_en_canal(oferta)
        db.marcar_notificacion_enviada(oferta["id"])
        print(f"    canal: {'ok' if publicado else 'fallo'}")

    print("Listo.")


if __name__ == "__main__":
    main()
