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

load_dotenv()

DB_HOST = os.getenv("DB_HOST")
DB_PORT = os.getenv("DB_PORT", "5432")
DB_NAME = os.getenv("DB_NAME")
DB_USER = os.getenv("DB_USER")
DB_PASSWORD = os.getenv("DB_PASSWORD")

DATABASE_URL = (
    f"postgresql+psycopg2://{quote_plus(DB_USER)}:{quote_plus(DB_PASSWORD)}"
    f"@{DB_HOST}:{DB_PORT}/{DB_NAME}"
)

SECRET_KEY = os.getenv("SECRET_KEY")

ALGORITHM = os.getenv("ALGORITHM")

ACCESS_TOKEN_EXPIRE_MINUTES = int(
    os.getenv("ACCESS_TOKEN_EXPIRE_MINUTES", "60")
)

REFRESH_TOKEN_EXPIRE_DAYS = int(
    os.getenv("REFRESH_TOKEN_EXPIRE_DAYS", "30")
)

def _env(name: str, default: str | None = None) -> str | None:
    value = os.getenv(name, default)
    return value.strip() if value else value


SMTP_HOST = _env("SMTP_HOST")
SMTP_PORT = int(_env("SMTP_PORT", "587"))
SMTP_USER = _env("SMTP_USER") or _env("SMTP_FROM")
SMTP_PASSWORD = _env("SMTP_PASSWORD")
SMTP_FROM = _env("SMTP_FROM")
SMTP_TLS = _env("SMTP_TLS", "true").lower() in ("true", "1", "yes")
SMTP_SSL = _env("SMTP_SSL", "false").lower() in ("true", "1", "yes")

HUDL_EMAIL = _env("HUDL_EMAIL")
HUDL_PASSWORD = _env("HUDL_PASSWORD")
HUDL_LOGIN_URL = _env("HUDL_LOGIN_URL") or _env("HUDL_URL")

CREDENTIAL_ENCRYPTION_KEY = _env("CREDENTIAL_ENCRYPTION_KEY")

FRONTEND_URL = (_env("FRONTEND_URL") or "http://localhost:5173").rstrip("/")
FRONTEND_STAGING_URL = (_env("FRONTEND_STAGING_URL") or "").rstrip("/")

_LOCAL_API_HOSTS = {"localhost", "127.0.0.1", "0.0.0.0"}


def get_frontend_base_url(request_host: str | None = None) -> str:
    """Pick frontend URL from the API host that received the request."""
    host = (request_host or "").split(":")[0].lower()
    if host in _LOCAL_API_HOSTS:
        return FRONTEND_URL
    if FRONTEND_STAGING_URL:
        return FRONTEND_STAGING_URL
    return FRONTEND_URL