# ----- Librerias -----
from pathlib import Path
import pandas as pd

## ---- Funcion  para leer archivos de datos formatos .csv, .xls y .xlsx ---- ##
def leer_archivo(ruta_archivo, hoja=None):
    """
    Lee un archivo de datos (.csv, .xls, .xlsx) y lo devuelve como un DataFrame de Pandas.
    
    Parámetros:
    -----------
    ruta_archivo : str o Path
        Ruta completa al archivo que deseas leer.
        
    hoja : int, str o None, opcional (solo aplica para archivos Excel)
        - Si es un número entero (0, 1, 2...), selecciona la hoja por posición.
        - Si es una cadena, selecciona la hoja por nombre.
        - Si es None (por defecto), se carga la primera hoja.

    Retorna:
    --------
    pd.DataFrame
        El contenido del archivo cargado como DataFrame.

    Excepciones:
    ------------
    FileNotFoundError
        Si el archivo no existe en la ruta proporcionada.

    ValueError
        Si el archivo tiene una extensión no soportada o no puede ser leído.

    UnicodeDecodeError
        Si el archivo CSV no puede ser leído con ninguna codificación común.

    Ejemplo:
    # Leer CSV (automáticamente prueba varias codificaciones)
    df_csv = leer_archivo("datos.csv")

    # Leer Excel, primera hoja por defecto
    df_xlsx = leer_archivo("datos.xlsx")

    # Leer Excel, segunda hoja (por posición)
    df_hoja2 = leer_archivo("datos.xlsx", hoja=1)

    # Leer Excel, por nombre de hoja
    df_hoja_named = leer_archivo("datos.xlsx", hoja="Resumen")

    Datos:
    Si quieres ver las hojas disponibles en un archivo Excel, puedes usar el siguiente código:
    import pandas as pd
    ruta = 'Base de datos/Ventas con creditos/Mazatlan-Ventas-historicas-creditos.xlsx'
    hojas_disponibles = pd.ExcelFile(ruta).sheet_names
    print("Hojas disponibles:", hojas_disponibles)

    """
    ruta = Path(ruta_archivo)
    
    if not ruta.exists():
        raise FileNotFoundError(f"El archivo no se encontró: {ruta}")
    
    extension = ruta.suffix.lower()

  # === Archivos Excel .xls ===
    if extension == '.xls':
        try:
            if hoja is None:
                hoja = 0  # por defecto, primera hoja
            return pd.read_excel(ruta, engine='xlrd', sheet_name=hoja)
        except Exception as e:
            raise ValueError(f"No se pudo leer el archivo .xls: {ruta}\nError: {e}")

            
    elif extension == '.xlsx':
        try:
            if hoja is None:
                hoja = 0  # Por defecto, la primera hoja
            return pd.read_excel(ruta, sheet_name=hoja)
        except Exception as e:
            raise ValueError(f"No se pudo leer el archivo .xlsx: {ruta}\nError: {e}")


    # === Archivos CSV ===
    elif extension == '.csv':
        encodings_a_probar = ['utf-8', 'ISO-8859-1', 'latin1', 'cp1252']
        for enc in encodings_a_probar:
            try:
                return pd.read_csv(ruta, encoding=enc)
            except UnicodeDecodeError:
                continue
            except Exception as e:
                raise ValueError(f"Error inesperado al leer CSV con codificación '{enc}': {e}")
        
        raise UnicodeDecodeError(
            "leer_archivo", ruta, 0, 0,
            f"No se pudo leer el archivo CSV con las codificaciones: {', '.join(encodings_a_probar)}"
        )
    
    else:
        raise ValueError(f"Formato de archivo no soportado: '{extension}'. Solo se permiten .csv, .xls, .xlsx")
