import os
from urllib.parse import quote
from dotenv import load_dotenv

load_dotenv()  # Carga las variables del archivo .env


def _as_bool(value, default=False):
    if value is None:
        return default
    return str(value).strip().lower() in ('1', 'true', 'yes', 'on', 'si')


def _as_int(value, default):
    try:
        return int(value)
    except (TypeError, ValueError):
        return default

# Obtén las partes separadas de la conexión
db_host = os.getenv('DB_HOST')
db_user = os.getenv('DB_USER')
db_password = os.getenv('DB_PASSWORD')
db_name = os.getenv('DB_NAME')

# Codifica la contraseña
# Asegura que la contraseña se URL-escapee si contiene caracteres especiales
try:
    encoded_password = quote(db_password or '')
except Exception:
    encoded_password = db_password or ''

# Construye la cadena de conexión


class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY')
    SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{db_user}:{encoded_password}@{db_host}/{db_name}"
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    JSON_SORT_KEYS = False
    DEBUG = False
    TESTING = False
    PROPAGATE_EXCEPTIONS = True
    PYTHONIOENCODING = 'utf-8'
    CONECTADO_A = os.environ.get('CONECTADO_A', 'produccion')
    #CONFIGURACION WHATSAPP
    
    WTF_CSRF_TIME_LIMIT = 3600 * 24   # Deshabilitar el tiempo de expiración del token CSRF
    
    PHONE_ID = os.environ.get('PHONE_ID')
    TOKEN = os.environ.get('TOKEN')
    WTF_CSRF_ENABLED = True  # Habilitar CSRF para formularios normales, pero se excluirá el webhook de WhatsApp
    ENABLE_PROGRAMACION_SOCKET = _as_bool(os.environ.get('ENABLE_PROGRAMACION_SOCKET'), default=False)
    PERF_LOG_ALL_REQUESTS = _as_bool(os.environ.get('PERF_LOG_ALL_REQUESTS'), default=False)
    PERF_SLOW_REQUEST_MS = _as_int(os.environ.get('PERF_SLOW_REQUEST_MS'), default=800)
    PERF_SLOW_SQL_MS = _as_int(os.environ.get('PERF_SLOW_SQL_MS'), default=300)