# /home/x/rss/scheduler.py

import time
import logging
import atexit
from datetime import datetime, timedelta
import sys # Added this import

from apscheduler.schedulers.background import BackgroundScheduler
# Importamos la app (para el contexto) y la función de captura desde nuestro fichero principal
from app import app, fetch_and_store

# Es importante configurar el logging también para este proceso
logging.basicConfig(stream=sys.stdout, level=logging.INFO, format='[%(asctime)s] %(levelname)s in %(module)s: %(message)s')

# Creamos el planificador con la zona horaria UTC para evitar ambigüedades
scheduler = BackgroundScheduler(daemon=True, timezone="UTC")

# --- INICIO DE LA MEJORA: Apagado robusto con atexit ---
def shutdown_scheduler():
    """Función para detener el planificador de forma segura al salir."""
    if scheduler.running:
        scheduler.shutdown()
        logging.info("Scheduler del worker detenido.")

# Registramos la función de apagado para que se ejecute al terminar el proceso
atexit.register(shutdown_scheduler)
# --- FIN DE LA MEJORA ---

if __name__ == '__main__':
    # Usamos el contexto de la aplicación para asegurar que la tarea tiene acceso a todo lo necesario
    with app.app_context():
        # Añadimos la tarea para que se ejecute cada 15 minutos
        # La primera ejecución será a los 10 segundos de arrancar el worker
        scheduler.add_job(
            fetch_and_store,
            "interval",
            minutes=3,
            id="rss_job",
            next_run_time=datetime.utcnow() + timedelta(seconds=10)
        )

    # Arrancamos el planificador
    scheduler.start()

    logging.info("Worker del Scheduler iniciado. Tarea programada cada 15 minutos.")
    logging.info("El proceso se mantendrá en ejecución para permitir que se ejecuten las tareas.")

    # Este bucle infinito simplemente mantiene vivo el script del worker.
    # El apagado ahora es manejado por atexit.
    while True:
        time.sleep(60)
