"""
Lee los mensajes ENTRANTES del bot de Telegram (para recibir tu respuesta a
los avisos de tandas). Usa el mismo .env/config que notifier.py.

    python Archivos/leer_telegram.py          # muestra los mensajes nuevos
    python Archivos/leer_telegram.py --ack    # ademas los confirma (no repiten)
    python Archivos/leer_telegram.py --all    # ignora el offset guardado

El offset confirmado se guarda en Archivos/.tg_offset (local, en .gitignore).
Requiere TELEGRAM_ENABLED=true y TELEGRAM_BOT_TOKEN en el .env de la raiz.
"""
import argparse
import sys
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parent))

import requests  # noqa: E402
from config import TELEGRAM_SETTINGS  # noqa: E402

OFFSET = Path(__file__).resolve().parent / ".tg_offset"
API = "https://api.telegram.org/bot%s/getUpdates"


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("--ack", action="store_true",
                    help="confirma: los mensajes leidos no vuelven a salir")
    ap.add_argument("--all", action="store_true",
                    help="ignora el offset guardado (trae todo lo pendiente)")
    args = ap.parse_args()

    if not TELEGRAM_SETTINGS.get("enabled", False):
        print("[i] Telegram deshabilitado (TELEGRAM_ENABLED=false). Nada que leer.")
        return
    token = TELEGRAM_SETTINGS.get("bot_token")
    if not token:
        print("[!] Falta TELEGRAM_BOT_TOKEN en el .env")
        return

    offset = 0
    if not args.all and OFFSET.exists():
        try:
            offset = int(OFFSET.read_text(encoding="utf-8").strip())
        except ValueError:
            offset = 0

    params = {"timeout": 0}
    if offset:
        params["offset"] = offset
    try:
        data = requests.get(API % token, params=params, timeout=20).json()
    except Exception as e:
        print("[!] no se pudo conectar con Telegram: %s" % e)
        return
    if not data.get("ok"):
        print("[!] API Telegram: %s" % data.get("description"))
        return

    updates = data.get("result", [])
    if not updates:
        print("[i] sin mensajes nuevos.")
        return

    last = offset
    for u in updates:
        msg = u.get("message") or u.get("edited_message") or {}
        text = msg.get("text", "(sin texto)")
        frm = (msg.get("from") or {}).get("first_name", "?")
        chat = (msg.get("chat") or {}).get("id", "?")
        print("[%s] chat=%s de %s: %s" % (u["update_id"], chat, frm, text))
        last = max(last, u["update_id"] + 1)

    if args.ack:
        OFFSET.write_text(str(last), encoding="utf-8")
        print("[OK] offset confirmado -> %d" % last)
    else:
        print("[i] no confirmados (usa --ack para que no repitan).")


if __name__ == "__main__":
    main()
