from fastapi_mail import ConnectionConfig
from pydantic_settings import BaseSettings, SettingsConfigDict
#from fastapi_mail import ConnectionConfig
from app.log import get_logger

log = get_logger(__name__)


class Settings(BaseSettings):
    """Configuration settings for the application."""

    model_config = SettingsConfigDict(env_file="./.env", env_file_encoding="utf-8", case_sensitive=True, extra="allow")

    API_VERSION: str = "0.0.1"
    PROJECT_TITLE: str = "API Documentation"
    PROJECT_NAME: str = "API Documentation"
    DESCRIPTION: str = "API Documentation"

    SQL_HOST: str = "host.docker.internal"
    SQL_USER: str = "root"
    SQL_PASS: str = ""
    SQL_DB: str = "CNC_database"
    SQL_PORT: int = 3306

    # MONGODB
    MONGODB_URI: str = "mongodb://localhost:27017"
    MONGODB_DB: str = "main"
    MONGO_HOST: str="localhost"
    MONGO_PORT: str = "27017"

    MAIN_ENCRYPTION_IV: str = "1234567890123456"
    MAIN_ENCRYPTION_KEY: str = "1234567890123456"

    ALLOWED_ORIGINS: list = ["127.0.0.3"]

    IDLE_DURATION_IN_MINUTES: int = 10
    REDIS_HOST: str = "redis://localhost"

    # Authentication Settings
    # SECRET_KEY: str = "M92p9vXsTacYpkA6uDHAFBan/Hi+lFLGHWhmWPEfaOw$"
    # ALGORITHM: str = "HS256"
    # ACCESS_TOKEN_EXPIRE_MINUTES: int = 60

    ACCESS_TOKEN_EXPIRE_MINUTES: int = 600
    REFRESH_TOKEN_EXPIRE_DAYS: int = 7
    SECRET_KEY: str = "M92p9vXsTacYpkA6uDHAFBan/Hi+lFLGHWhmWPEfaOw$"
    REFRESH_SECRET_KEY: str = "M92p9vXsTacYpkA6uDHAFBan/Hi+lFLGHWhmWPEfaOw$"
    ALGORITHM: str = "HS256"


    # Mail Configuration
    MAIL_USERNAME: str
    MAIL_PASSWORD: str
    MAIL_FROM: str
    MAIL_PORT: int
    MAIL_SERVER: str
    MAIL_STARTTLS: bool
    MAIL_SSL_TLS: bool



def get_settings(env: str = "local") -> Settings:
    """
    Return the settings object based on the environment.

    Parameters
    ----------
        env (str): The environment to retrieve the settings for. Defaults to "dev".

    Returns
    -------
        Settings: The settings object based on the environment.

    Raises
    ------
        ValueError: If the environment is invalid.
    """
    log.debug("getting settings for env: %s", env)
    return Settings()  # type: ignore  # noqa: PGH003


settings = get_settings()
CONFIG_SETTINGS = Settings()


conf = ConnectionConfig(
    MAIL_USERNAME=settings.MAIL_USERNAME,
    MAIL_PASSWORD=settings.MAIL_PASSWORD,
    MAIL_FROM=settings.MAIL_FROM,
    MAIL_PORT=settings.MAIL_PORT,  # 465 for SSL, 587 for TLS
    MAIL_SERVER=settings.MAIL_SERVER,
    MAIL_STARTTLS=settings.MAIL_STARTTLS,  # Use this instead of MAIL_TLS
    MAIL_SSL_TLS=settings.MAIL_SSL_TLS   # Use this instead of MAIL_SSL
)
