"""
Configuracion centralizada de LicenciasMiG.
Lee variables de entorno (con .env). No tiene valores secretos hardcoded.
"""
from __future__ import annotations

import os
from datetime import timedelta
from urllib.parse import quote_plus

from dotenv import load_dotenv

load_dotenv()


class Config:
    # ----- Base de datos -----
    DB_SERVER   = os.getenv('DB_SERVER',   'localhost')
    DB_PORT     = os.getenv('DB_PORT',     '1433')
    DB_DATABASE = os.getenv('DB_DATABASE', 'LicenciasMIG')
    DB_USERNAME = os.getenv('DB_USERNAME', 'sa')
    DB_PASSWORD = os.getenv('DB_PASSWORD', '')
    DB_DRIVER   = os.getenv('DB_DRIVER',   'ODBC Driver 17 for SQL Server').replace(' ', '+')

    # URL-encode el password porque puede contener caracteres reservados
    # ('*', '/', '@', etc.) que rompen el parsing del URI SQLAlchemy.
    _PW_ENC = quote_plus(DB_PASSWORD)

    SQLALCHEMY_DATABASE_URI = (
        f'mssql+pyodbc://{DB_USERNAME}:{_PW_ENC}@{DB_SERVER}:{DB_PORT}/{DB_DATABASE}'
        f'?driver={DB_DRIVER}&TrustServerCertificate=yes&Encrypt=yes'
    )
    SQLALCHEMY_TRACK_MODIFICATIONS = False

    # ----- Flask -----
    SECRET_KEY = os.getenv('FLASK_SECRET_KEY', 'cambia-esto-en-produccion')
    DEBUG      = os.getenv('FLASK_DEBUG', 'False').lower() in ('1', 'true', 'yes')
    PORT       = int(os.getenv('FLASK_PORT', '89'))

    REMEMBER_COOKIE_DURATION = timedelta(days=14)
    SESSION_COOKIE_HTTPONLY  = True
    SESSION_COOKIE_SAMESITE  = 'Lax'

    # ----- SOAP credenciales heredadas (cliente MIG envia estas) -----
    SOAP_USER     = os.getenv('SOAP_USER',     'admin')
    SOAP_PASSWORD = os.getenv('SOAP_PASSWORD', '123*/')
