"""
Django settings for config project.
Ready for cPanel / Namecheap Deployment.
"""

from pathlib import Path
import os
import dj_database_url
from decouple import config, Csv

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# =================================================================
# 1. SÉCURITÉ & HÔTES
# =================================================================

# SECRET_KEY : Doit être dans le .env en production
SECRET_KEY = config('SECRET_KEY')

# DEBUG : True en local, False en prod (via .env)
DEBUG = config('DEBUG', default=False, cast=bool)

# ALLOWED_HOSTS : Liste des domaines autorisés
# En prod, ajouter ton domaine : ALLOWED_HOSTS=tonsite.com,www.tonsite.com
ALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=Csv())


# =================================================================
# 2. APPLICATIONS
# =================================================================

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # --- Mes Applications ---
    'core',
    'sidebar',
    'home',
    'projects',
    'services',
    'about',
    'contact',
    'mediautils',
    'bot',

    # --- Utilitaires ---
    'django_cleanup.apps.CleanupConfig', # Nettoyage auto des fichiers (toujours en dernier)
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    # WhiteNoise est retiré car cPanel (Apache/LiteSpeed) gère les statiques
    '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': [os.path.join(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',
                # Context Processors Personnalisés
                'core.context_processors.site_settings',
                'sidebar.context_processors.sidebar_context',
            ],
        },
    },
]

WSGI_APPLICATION = 'config.wsgi.application'


# =================================================================
# 3. BASE DE DONNÉES (Compatible cPanel MySQL/PostgreSQL)
# =================================================================

# En Local : Utilise SQLite par défaut si DATABASE_URL n'est pas défini.
# En Prod (cPanel) : On définira DATABASE_URL dans le .env pour pointer vers MySQL.
DATABASES = {
    'default': dj_database_url.config(
        default=f"sqlite:///{BASE_DIR / 'db.sqlite3'}",
        conn_max_age=600,
        ssl_require=False # Mettre à True si la BDD force le SSL
    )
}


# =================================================================
# 4. VALIDATION & INTERNATIONALISATION
# =================================================================

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 = 'fr-fr'
TIME_ZONE = 'Africa/Porto-Novo'
USE_I18N = True
USE_L10N = True
USE_TZ = True


# =================================================================
# 5. FICHIERS STATIQUES & MÉDIAS (Configuration Namecheap/cPanel)
# =================================================================

STATIC_URL = '/static/'
MEDIA_URL = '/media/'

# En production sur cPanel, on veut souvent que collectstatic envoie les fichiers
# directement dans le dossier public (public_html) pour qu'ils soient servis par Apache.
# Si tu es en local, ça ira dans un dossier 'staticfiles' à la racine.
if DEBUG:
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
else:
    # CONFIGURATION PROD (À ajuster selon l'arborescence cPanel)
    # Option A : Le projet est au même niveau que public_html
    # STATIC_ROOT = BASE_DIR.parent / 'public_html' / 'static'
    # MEDIA_ROOT = BASE_DIR.parent / 'public_html' / 'media'
    
    # Option B (Plus sûre) : On garde un dossier local et on fera un lien symbolique
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

# Dossiers statiques supplémentaires (CSS/JS du thème global)
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'


# =================================================================
# 6. CONFIGURATIONS SPÉCIFIQUES (EMAIL, IA)
# =================================================================

# --- Email ---
ADMIN_EMAIL = config('ADMIN_EMAIL', default='houessoukenny205@gmail.com')

if DEBUG:
    EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
    DEFAULT_FROM_EMAIL = 'test@localhost'
else:
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_HOST = config('EMAIL_HOST')
    EMAIL_PORT = config('EMAIL_PORT', cast=int)
    EMAIL_USE_TLS = config('EMAIL_USE_TLS', cast=bool)
    EMAIL_USE_SSL = config('EMAIL_USE_SSL', cast=bool)
    EMAIL_HOST_USER = config('EMAIL_HOST_USER')
    EMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD')
    DEFAULT_FROM_EMAIL = config('DEFAULT_FROM_EMAIL')

# --- IA Chatbot (OpenRouter) ---
OPENROUTER_API_KEY = config('OPENROUTER_API_KEY', default='')
OPENROUTER_MODEL = config('OPENROUTER_MODEL', default='meta-llama/llama-3.2-3b-instruct:free')
SITE_URL = config('SITE_URL', default='http://localhost:8000')
SITE_NAME = config('SITE_NAME', default='My Portfolio')