"""Django settings for the personal website project."""

from pathlib import Path

from decouple import Csv, config

BASE_DIR = Path(__file__).resolve().parent.parent

SECRET_KEY = config("SECRET_KEY", default="django-insecure-change-me-in-production")
DEBUG = config("DEBUG", default=True, cast=bool)
ALLOWED_HOSTS = config("ALLOWED_HOSTS", default="127.0.0.1,localhost", cast=Csv())

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "django.contrib.sitemaps",
    "django.contrib.humanize",
    # third party
    "tinymce",
    # local
    "core",
    "profiles",
    "careers",
    "blog",
    "dashboard",
]

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    # WhiteNoise menyajikan file di STATIC_ROOT tanpa bantuan Nginx/Apache,
    # sehingga tampilan tetap normal walaupun DEBUG=False.
    "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",
                "core.context_processors.site_context",
            ],
        },
    },
]

WSGI_APPLICATION = "config.wsgi.application"

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": config("DB_NAME", default="personal_web"),
        "USER": config("DB_USER", default="root"),
        "PASSWORD": config("DB_PASSWORD", default=""),
        "HOST": config("DB_HOST", default="127.0.0.1"),
        "PORT": config("DB_PORT", default="3306"),
        "OPTIONS": {
            "charset": "utf8mb4",
            "init_command": "SET sql_mode='STRICT_TRANS_TABLES'",
        },
    }
}

AUTH_PASSWORD_VALIDATORS = [
    {"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"},
    {"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"},
    {"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"},
    {"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"},
]

LANGUAGE_CODE = "id"
TIME_ZONE = "Asia/Jakarta"
USE_I18N = True
USE_TZ = True

STATIC_URL = "static/"
STATICFILES_DIRS = [BASE_DIR / "static"]
STATIC_ROOT = BASE_DIR / "staticfiles"

# Compressed, BUKAN Manifest: TinyMCE menyusun URL skin & plugin-nya sendiri saat
# runtime, jadi kalau nama berkas diberi hash oleh Manifest storage, editor rusak.
STORAGES = {
    "default": {"BACKEND": "django.core.files.storage.FileSystemStorage"},
    "staticfiles": {"BACKEND": "whitenoise.storage.CompressedStaticFilesStorage"},
}
WHITENOISE_MAX_AGE = 60 * 60 * 24 * 30  # cache 30 hari di browser

MEDIA_URL = "media/"
MEDIA_ROOT = BASE_DIR / "media"

DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"

# --------------------------------------------------------------------- keamanan
# Dinyalakan lewat .env hanya saat domain sudah memakai HTTPS. Kalau diaktifkan
# di 127.0.0.1, browser akan dipaksa ke https dan situs jadi tidak bisa dibuka.
USE_HTTPS = config("USE_HTTPS", default=False, cast=bool)

if USE_HTTPS:
    SECURE_SSL_REDIRECT = True
    SESSION_COOKIE_SECURE = True
    CSRF_COOKIE_SECURE = True
    SECURE_HSTS_SECONDS = 60 * 60 * 24 * 365
    SECURE_HSTS_INCLUDE_SUBDOMAINS = True
    SECURE_HSTS_PRELOAD = True
    SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")

if not DEBUG:
    SECURE_CONTENT_TYPE_NOSNIFF = True
    X_FRAME_OPTIONS = "DENY"
    CSRF_COOKIE_HTTPONLY = False  # dibaca JS untuk upload gambar di editor
    SESSION_COOKIE_HTTPONLY = True
    CSRF_TRUSTED_ORIGINS = config(
        "CSRF_TRUSTED_ORIGINS", default="", cast=Csv()
    ) or [f"https://{h}" for h in ALLOWED_HOSTS if h not in ("127.0.0.1", "localhost")]

LOGIN_URL = "dashboard:login"
LOGIN_REDIRECT_URL = "dashboard:index"
LOGOUT_REDIRECT_URL = "core:home"

MESSAGE_STORAGE = "django.contrib.messages.storage.session.SessionStorage"

FILE_UPLOAD_MAX_MEMORY_SIZE = 5 * 1024 * 1024  # 5 MB

TINYMCE_DEFAULT_CONFIG = {
    "height": 480,
    "menubar": False,
    "plugins": "advlist autolink lists link image charmap preview anchor "
    "searchreplace visualblocks code fullscreen insertdatetime media table "
    "code help wordcount codesample quickbars",
    "toolbar": "undo redo | blocks | bold italic underline strikethrough | "
    "image link media | bullist numlist blockquote codesample | "
    "alignleft aligncenter alignright | outdent indent | removeformat code fullscreen",
    # Bungkus ke baris berikutnya, jangan sembunyikan tombol di menu "..." —
    # kolom editor pada form postingan cukup sempit.
    "toolbar_mode": "wrap",
    # Samakan tampilan area menulis dengan halaman aslinya yang bertema gelap,
    # supaya yang terlihat saat menulis = yang terlihat pengunjung.
    "skin": "oxide-dark",
    "content_css": "dark",
    "content_style": (
        "body { background:#0f0f10; color:#d6d3d1; font-family:'Plus Jakarta Sans',Inter,sans-serif;"
        " font-size:16px; line-height:1.8; padding:18px 22px; }"
        "h1,h2,h3,h4 { color:#fafaf9; font-weight:700; letter-spacing:-0.02em; }"
        "a { color:#facc15; }"
        "blockquote { border-left:3px solid #f97316; margin:1.4rem 0; padding-left:1.1rem;"
        " color:#a8a29e; font-style:italic; }"
        "code { background:rgba(249,115,22,0.14); color:#fde047; padding:2px 6px; border-radius:5px; }"
        "pre { background:#151517; border:1px solid rgba(255,255,255,0.09); border-radius:12px;"
        " padding:16px; overflow-x:auto; }"
        "img { max-width:100%; height:auto; border-radius:12px; }"
        "table { border-collapse:collapse; width:100%; }"
        "th,td { border:1px solid rgba(255,255,255,0.12); padding:8px 12px; }"
    ),
    "promotion": False,
    "branding": False,
    # --- upload gambar ---------------------------------------------------
    # Nilai di bawah adalah NAMA fungsi global, bukan string biasa:
    # init_tinymce.js milik django-tinymce menggantinya dengan window[nama].
    # Definisinya ada di static/js/tinymce-upload.js.
    "images_upload_handler": "djangoImageUploadHandler",
    "file_picker_callback": "djangoFilePicker",
    "file_picker_types": "image",
    "automatic_uploads": True,  # drag-drop & paste ikut terunggah
    "paste_data_images": True,
    "image_advtab": True,
    "image_caption": True,
    "image_dimensions": False,  # biarkan CSS yang mengatur ukuran
    "convert_urls": False,  # jangan utak-atik URL /media/
    "quickbars_insert_toolbar": False,
    "quickbars_selection_toolbar": "bold italic | quicklink blockquote",
}

TINYMCE_EXTRA_MEDIA = {"js": ["js/tinymce-upload.js"]}
