from pymongo import MongoClient
#import datetime
from datetime import datetime, timedelta
import pytz  # Necesitas instalar: pip install pytz
# 1) Importa el codificador correcto para Pydantic v2
#from pydantic.v1.json import ENCODERS_BY_TYPE
#from bson import ObjectId


# Convierte ObjectId automáticamente a str
#ENCODERS_BY_TYPE[ObjectId] = str
# Crear zona horaria de Colombia

colombia_tz = pytz.timezone('America/Bogota')
class MongoDBStorage:
    def __init__(self, uri: str, db_name: str, collection_name: str):
        """
        Inicializa la conexión con MongoDB y selecciona la base de datos y colección.
        """
        self.client = MongoClient(uri)
        self.db = self.client[db_name]
        self.collection = self.db[collection_name]

    def guardar_pdf(self, nombre_archivo: str, contenido: str, usuario: str = "sistema"):
        """
        Guarda el texto extraído desde un PDF en la base de datos.
        """
        documento = {
            "usuario": usuario,
            "nombre_archivo": nombre_archivo,
            "contenido_pdf": contenido,
            "fecha_guardado": datetime.now(colombia_tz)
        }
        self.collection.insert_one(documento)
        print(f"Documento PDF '{nombre_archivo}' guardado exitosamente en MongoDB.")
    def guardar_analisis(
        self,
        descripcion: str,
        analisis_html: str,
        codigos_cie10: list,
        codigos_cups: list,
        usuario: str,
        nombre_archivo: str,
        *,
        nombre_paciente: str = "",
        analysis_document_id: str = "",
        case_key: str = "",
        case_number: str = "",
        batch_id: str = "",
        batch_file_id: str = "",
        ingestion_source: str = "manual",
    ) -> str:
        doc = {
            "usuario": usuario,
            "nombre_archivo": nombre_archivo,
            "descripcion": descripcion,
            "analisis_html": analisis_html,
            "codigos_cie10": codigos_cie10,
            "codigos_cups": codigos_cups,
            "fecha_analisis": datetime.now(colombia_tz),
            "nombre_paciente": nombre_paciente or "desconocido",
            "analysis_document_id": analysis_document_id,
            "case_key": case_key,
            "case_number": case_number,
            "batch_id": batch_id,
            "batch_file_id": batch_file_id,
            "ingestion_source": ingestion_source,
        }
        return str(self.collection.insert_one(doc).inserted_id)
