import os
from pathlib import Path

from dotenv import load_dotenv

BASE_DIR = Path(__file__).resolve().parent.parent
load_dotenv(dotenv_path=BASE_DIR / ".env")


def _env(name: str, default: str = "") -> str:
    return (os.environ.get(name) or os.environ.get(f"\ufeff{name}") or default).strip()


def _mysql_database():
    """MySQL via variáveis MYSQL_* (recomendado no cPanel/servidor)."""
    db_name = _env("MYSQL_DATABASE") or _env("MYSQL_NAME")
    if not db_name:
        return None
    return {
        "ENGINE": "django.db.backends.mysql",
        "NAME": db_name,
        "USER": _env("MYSQL_USER", "root"),
        "PASSWORD": _env("MYSQL_PASSWORD"),
        "HOST": _env("MYSQL_HOST", "localhost"),
        "PORT": _env("MYSQL_PORT", "3306"),
        "OPTIONS": {"charset": "utf8mb4"},
    }


def _database_url():
    engine = _env("DB_ENGINE").lower()
    if engine == "sqlite":
        path = _env("SQLITE_PATH") or str(BASE_DIR / "instance" / "sysrevisao.db")
        return {"ENGINE": "django.db.backends.sqlite3", "NAME": path}

    mysql = _mysql_database()
    if mysql:
        return mysql

    url = _env("DATABASE_URL")
    if url.startswith("sqlite:///"):
        return {"ENGINE": "django.db.backends.sqlite3", "NAME": url.replace("sqlite:///", "")}
    if url.startswith("mysql://"):
        url = url.replace("mysql://", "mysql+pymysql://", 1)
    if "mysql" in url:
        import urllib.parse as up

        parsed = up.urlparse(url)
        return {
            "ENGINE": "django.db.backends.mysql",
            "NAME": parsed.path.lstrip("/"),
            "USER": up.unquote(parsed.username or ""),
            "PASSWORD": up.unquote(parsed.password or ""),
            "HOST": parsed.hostname or "localhost",
            "PORT": str(parsed.port or 3306),
            "OPTIONS": {"charset": "utf8mb4"},
        }
    return {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": str(BASE_DIR / "instance" / "sysrevisao.db"),
    }


SECRET_KEY = os.environ.get("SECRET_KEY", "dev-secret-key-change-in-production")
DEBUG = os.environ.get("DEBUG", "1") == "1"
ALLOWED_HOSTS = [
    h.strip()
    for h in os.environ.get("ALLOWED_HOSTS", "localhost,127.0.0.1,testserver").split(",")
    if h.strip()
]

CSRF_TRUSTED_ORIGINS = [
    origin.strip()
    for origin in os.environ.get("CSRF_TRUSTED_ORIGINS", "").split(",")
    if origin.strip()
]

# LiteSpeed/cPanel atrás de proxy HTTPS
if not DEBUG:
    SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
    SESSION_COOKIE_SECURE = True
    CSRF_COOKIE_SECURE = True

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "crispy_forms",
    "crispy_bootstrap4",
    "accounts",
    "reviews.apps.ReviewsConfig",
    "core",
    "invites",
    "rsl.apps.RslConfig",
    "portal.apps.PortalConfig",
]

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "whitenoise.middleware.WhiteNoiseMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
]

ROOT_URLCONF = "config.urls"

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [BASE_DIR / "templates"],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
                "rsl.context_processors.global_context",
            ],
        },
    },
]

WSGI_APPLICATION = "config.wsgi.application"

DATABASES = {"default": _database_url()}

AUTH_USER_MODEL = "accounts.User"
AUTHENTICATION_BACKENDS = [
    "accounts.backends.EmailWerkzeugBackend",
    "django.contrib.auth.backends.ModelBackend",
]

LOGIN_URL = "/accounts/login/"
LOGIN_REDIRECT_URL = "/reviews/"
LOGOUT_REDIRECT_URL = "/"

AUTH_PASSWORD_VALIDATORS = []

LANGUAGE_CODE = "pt-br"
TIME_ZONE = "America/Recife"
USE_I18N = True
USE_TZ = True

STATIC_URL = "/static/"
STATICFILES_DIRS = [BASE_DIR / "static"]
STATIC_ROOT = BASE_DIR / "staticfiles"
STORAGES = {
    "staticfiles": {
        "BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage",
    },
}

DEFAULT_AUTO_FIELD = "django.db.models.AutoField"

CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap4"
CRISPY_TEMPLATE_PACK = "bootstrap4"

SKIP_DEMO_SEED = os.environ.get("SKIP_DEMO_SEED", "").lower() in ("1", "true", "yes")

# Compatível com pasta arquivos/ do projeto Flask (opcional)
ARCHIVOS_DIR = Path(os.environ.get("ARCHIVOS_DIR", str(BASE_DIR.parent / "sysRevisao" / "arquivos")))
