# app/core/config.py
from pydantic_settings import BaseSettings
from dotenv import load_dotenv
import os

# Carga las variables de entorno desde .env
load_dotenv()

class Settings(BaseSettings):
    # Configuration de APP
    APP_PATH: str = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
    ALLOW_ORIGINS: str = os.getenv("ALLOW_ORIGINS", "*")
    NAME_APP: str = os.getenv("NAME_APP", "main:app")
    HOSTING: str = os.getenv("HOSTING", "0.0.0.0")
    PORT: int = os.getenv("PORT", 8000)
    RELOAD: bool = os.getenv("RELOAD", True)
    URL_HOST: str = os.getenv("URL_HOST")
    URL_FRONT: str = os.getenv("URL_FRONT")
    APP_TITLE: str = os.getenv("APP_TITLE", "FastAPI App")
    APP_DESCRIPTION: str = os.getenv("APP_DESCRIPTION", "")
    APP_VERSION: str = os.getenv("APP_VERSION", "1.0.0")

    # configuracion DB
    DB_USER: str = os.getenv("DB_USER")
    DB_PASSWORD: str = os.getenv("DB_PASSWORD")
    DB_HOST: str = os.getenv("DB_HOST")
    DB_PORT: int = os.getenv("DB_PORT")
    DB_NAME: str = os.getenv("DB_NAME")

    # Configuración de correo electrónico
    EMAIL_USERNAME: str = os.getenv("EMAIL_USERNAME")
    EMAIL_PASSWORD: str = os.getenv("EMAIL_PASSWORD")
    SMTP_SERVER: str = os.getenv("SMTP_SERVER")
    SMTP_PORT: int = os.getenv("SMTP_PORT")
    NAME_COMPANY: str = os.getenv("NAME_COMPANY")

    # configuracion register
    TIME_EXPIRE_TOKEN_REGISTER: int = os.getenv("TIME_EXPIRE_TOKEN_REGISTER")
    TIME_EXPIRE_TOKEN_INVITE: int = os.getenv("TIME_EXPIRE_TOKEN_INVITE", 4320)
    VERIFICATION_TOKEN_ATTEMPTS: int = os.getenv("VERIFICATION_TOKEN_ATTEMPTS")
    TIME_VERIFICATION_TOKEN_ATTEMPTS: int = os.getenv("TIME_VERIFICATION_TOKEN_ATTEMPTS")

    # Session
    ACCESS_TOKEN_EXPIRE_MINUTES: int = os.getenv("ACCESS_TOKEN_EXPIRE_MINUTES")
    SECRET_KEY: str = os.getenv("SECRET_KEY")
    ALGORITHM: str = os.getenv("ALGORITHM")
    FAILED_LOGIN_ATTEMPTS: int = os.getenv("FAILED_LOGIN_ATTEMPTS")

    # encryption
    ENCRYPTION_KEY: str = os.getenv("ENCRYPTION_KEY")

    # backend de almacenamiento de credenciales fiscales: "db" (default) | "vault"
    CREDENTIALS_STORAGE: str = os.getenv("CREDENTIALS_STORAGE", "db")

    # Recovery passwd
    TIME_EXPIRE_TOKEN_RECOVERY_PASSWD: int = os.getenv("TIME_EXPIRE_TOKEN_RECOVERY_PASSWD")

    # Operaciones internas (admin)
    INTERNAL_API_KEY: str = os.getenv("INTERNAL_API_KEY")

    # gRPC DAOs
    GRPC_CLOUD_SERVICES_DAO_HOST: str = os.getenv("GRPC_CLOUD_SERVICES_DAO_HOST")
    GRPC_CLOUD_SERVICES_DAO_CERT: str = os.getenv("GRPC_CLOUD_SERVICES_DAO_CERT", "certs/cloud_services.crt")

    # class Config:
    #     env_file = ".env"
