import sys
import os
from pathlib import Path
from dotenv import load_dotenv
from .local_storage import LocalStorage
from .s3_storage import S3Storage

# ========== CONFIGURACIÓN DE RUTAS PARA VARIABLES DE ENTORNO ==========

# Obtener el directorio donde se encuentra este script (landing/storage/)
script_dir = os.path.dirname(os.path.abspath(__file__))  # /var/www/dev.api.imparables.cic-ware.com/landing/storage

# Devolverme al directorio landing
landing_dir = os.path.dirname(script_dir)  # /var/www/dev.api.imparables.cic-ware.com/landing

# Devolverme al directorio raíz del proyecto
root_dir = os.path.dirname(landing_dir)  # /var/www/dev.api.imparables.cic-ware.com

# Construir la ruta hacia el archivo .env en crm/configuraciones/
env_path = os.path.join(root_dir, "crm", "configuraciones", ".env")

# Cargar variables de entorno
if os.path.exists(env_path):
    load_dotenv(env_path)
    print(f"✅ Variables de entorno cargadas desde: {env_path}")
else:
    print(f"⚠ No se encontró el archivo .env en: {env_path}")

class StorageFactory:
    @staticmethod
    def get_storage(storage_type: str = None):
        if storage_type is None:
            storage_type = os.getenv('STORAGE_TYPE', 'local')
        
        if storage_type == 's3':
            # Obtener credenciales solo de variables de entorno
            bucket_name = os.getenv('S3_BUCKET_NAME')
            region = os.getenv('S3_REGION')
            access_key = os.getenv('S3_ACCESS_KEY')
            secret_key = os.getenv('S3_SECRET_KEY')
            
            # Validar que todas las credenciales estén presentes
            if not all([bucket_name, region, access_key, secret_key]):
                raise ValueError(
                    "Faltan variables de entorno para S3. Configure: "
                    "S3_BUCKET_NAME, S3_REGION, S3_ACCESS_KEY, S3_SECRET_KEY"
                )
            
            # Mostrar las variables cargadas exitosamente
            print(f"✅ Variables S3 cargadas exitosamente:")
            print(f"   S3_BUCKET_NAME: {bucket_name}")
            print(f"   S3_REGION: {region}")
            print(f"   S3_ACCESS_KEY: {access_key[:10]}..." if access_key else "None")
            print(f"   S3_SECRET_KEY: {secret_key[:10]}..." if secret_key else "None")
            
            return S3Storage(bucket_name, region, access_key, secret_key)
        else:
            return LocalStorage()
