import sys
import os

# --- BLOQUE DE AJUSTE DE PATH (El Truco) ---
# Obtiene la ruta de ESTE archivo actual
current_dir = os.path.dirname(os.path.abspath(__file__))
# Obtiene la ruta raíz del proyecto (subiendo 2 niveles: notifications -> modules -> root)
project_root = os.path.abspath(os.path.join(current_dir, '../../'))
# Agrega la raíz al sistema de busqueda de Python
sys.path.append(project_root)
# -------------------------------------------

# AHORA SÍ podemos importar desde la raíz sin errores
from pymongo import MongoClient, ASCENDING, DESCENDING
from shared_db_utils import SERVICES_DB_MAP

# Configuración: 15 días en segundos
TIEMPO_VIDA_NOTIFICACIONES = 1296000 

def setup_indexes():
    """
    Crea índices TTL en todas las bases de datos de servicios.
    Ubicación: modules/notifications/maintenance.py
    """
    # Importante: Usamos localhost o la URI definida en tus variables de entorno
    client = MongoClient("mongodb://localhost:27017/")
    
    print("--- [NOTIFICATIONS MODULE] INICIANDO MANTENIMIENTO DB ---")

    for service_name, db_name in SERVICES_DB_MAP.items():
        try:
            db = client[db_name]
            # --- COLECCIÓN 1: EL TABLÓN (NOTIFICACIONES) ---
            col_notif = db['notificaciones']
            # Índice para búsquedas rápidas por centro y fecha
            col_notif.create_index([("centro_id", ASCENDING), ("server_timestamp", DESCENDING)])
            # Índice TTL (Borrador automático a los 15 días)
            col_notif.create_index("server_timestamp", expireAfterSeconds=TIEMPO_VIDA_NOTIFICACIONES)
            
            # --- COLECCIÓN 2: LA LISTA DE FIRMAS (LECTURAS) ---
            # Esta es la NUEVA colección
            col_reads = db['notificaciones_lecturas']
            
            # Índice Compuesto Único: Un usuario no puede leer 2 veces lo mismo (evita duplicados)
            # Y hace que la búsqueda "Dame lo que leyó Juan" sea instantánea.
            col_reads.create_index(
                [("notification_id", ASCENDING), ("user_email", ASCENDING)], 
                unique=True
            )
            col_reads.create_index("read_at", expireAfterSeconds=TIEMPO_VIDA_NOTIFICACIONES)
            
            print(f"{service_name.upper()} ({db_name}): Índices y Tablas de Lectura actualizados.")
            
        except Exception as e:
            print(f"{service_name}: {e}")

if __name__ == "__main__":
    setup_indexes()