from functools import lru_cache
from urllib.parse import quote_plus

from pydantic_settings import BaseSettings, SettingsConfigDict


class Settings(BaseSettings):
    model_config = SettingsConfigDict(env_file=".env", extra="ignore")

    app_name: str = "SelfiePetti ERP"
    debug: bool = True
    secret_key: str = "change-this-to-a-long-random-secret"
    access_token_expire_minutes: int = 60
    refresh_token_expire_days: int = 14
    db_user: str = "selfiepetti"
    db_password: str = "Selfiepetti@123456"
    db_host: str = "127.0.0.1"
    db_port: int = 3306
    db_name: str = "selfiepetti"
    database_url: str = ""
    seed_super_admin_email: str = "admin@selfiepetti.com"
    seed_super_admin_password: str = "Admin@123"
    seed_admin_email: str = "manager@selfiepetti.com"
    seed_admin_password: str = "Admin@123"
    seed_user_email: str = "crm@selfiepetti.com"
    seed_user_password: str = "User@123"

    @property
    def sqlalchemy_url(self) -> str:
        if self.database_url.strip():
            return self.database_url.strip()
        password = quote_plus(self.db_password)
        return f"mysql+pymysql://{self.db_user}:{password}@{self.db_host}:{self.db_port}/{self.db_name}"


@lru_cache
def get_settings() -> Settings:
    return Settings()
