import os
from langchain_community.document_loaders.pdf import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
import streamlit as st


class PdfLangChain:
    """Clase para menejar documentos pdf con LangChain.
.

    Attributes:
        file_name (str): Nombre del archivo PDF.
        file_path (str): Ruta del archivo PDF.
    """

    def __init__(self, file_name: str) -> None:
        """
        Inicializa la clase.

        Args:
            file_name (str): Nombre del archivo PDF.
        """

        self.file_name = file_name
        self.file_path = os.path.join('documents', 'pdfs', self.file_name)

        # Verificar si el directorio exist, sino, crearlo
        if not os.path.exists(self.file_path):
            os.mkdir(self.file_path)

    @st.cache_resource
    def load_pdf(_self):
        """Carga el documento PDF.

        Returns:
            _type_: Lista de documentos cargados.
        """

        loader = PyPDFLoader(_self.file_path)
        _self.docs = loader.load()
        return _self.docs

    def split_docs(self, data: list) -> list:
        """Divide los documentos en fragmentos más pequeños.

        Args:
            data (list): Listra de docuemntos cargador

        Returns:
            _type_: Retrorna una lista con fragmentos mas pequeños
            del documento.
        """
        chunk_size = 2000
        chunk_overlap = 300

        splitter = RecursiveCharacterTextSplitter(
            chunk_size=chunk_size,
            chunk_overlap=chunk_overlap)
        self.docs_split = splitter.split_documents(data)

        return self.docs_split