"""Configuration Flask pour l'application Story.

Ce module contient toutes les configurations nécessaires pour Flask,
SQLAlchemy, JWT, et les services externes.
"""

import os
from datetime import timedelta
from typing import Optional


class Config:
    """Configuration principale de l'application Flask."""

    # Base
    ENV: str = os.getenv('FLASK_ENV', 'production')
    DEBUG: bool = os.getenv('DEBUG', 'False').lower() == 'true'
    SECRET_KEY: str = os.getenv('SECRET_KEY', 'dev-secret-key-change-in-production')
    
    # Database MySQL (O2Switch)
    DATABASE_USER: str = os.getenv('DB_USER', 'root')
    DATABASE_PASSWORD: str = os.getenv('DB_PASSWORD', '')
    DATABASE_HOST: str = os.getenv('DB_HOST', 'localhost')
    DATABASE_NAME: str = os.getenv('DB_NAME', 'story_db')
    
    SQLALCHEMY_DATABASE_URI: str = (
        f"mysql+pymysql://{DATABASE_USER}:{DATABASE_PASSWORD}"
        f"@{DATABASE_HOST}/{DATABASE_NAME}?charset=utf8mb4"
    )
    SQLALCHEMY_TRACK_MODIFICATIONS: bool = False
    SQLALCHEMY_ENGINE_OPTIONS: dict = {
        'pool_size': 10,
        'pool_recycle': 3600,
        'pool_pre_ping': True,
    }
    
    # JWT
    JWT_SECRET_KEY: str = os.getenv('JWT_SECRET_KEY', SECRET_KEY)
    JWT_ACCESS_TOKEN_EXPIRES: timedelta = timedelta(hours=1)
    JWT_REFRESH_TOKEN_EXPIRES: timedelta = timedelta(days=7)
    JWT_TOKEN_LOCATION: list[str] = ['headers']
    JWT_HEADER_NAME: str = 'Authorization'
    JWT_HEADER_TYPE: str = 'Bearer'
    
    # CORS
    CORS_ORIGINS: list[str] = os.getenv(
        'CORS_ORIGINS', 
        'https://story.cosmail.fr'
    ).split(',')
    
    # OpenAI
    OPENAI_API_KEY: Optional[str] = os.getenv('OPENAI_API_KEY')
    OPENAI_MODEL_CHAT: str = os.getenv('OPENAI_MODEL_CHAT', 'gpt-4-turbo-preview')
    OPENAI_MODEL_IMAGE: str = os.getenv('OPENAI_MODEL_IMAGE', 'dall-e-3')
    MAX_TOKENS_NARRATIVE: int = 500
    TEMPERATURE: float = 0.8
    
    # Email (SMTP O2Switch)
    MAIL_SERVER: str = os.getenv('MAIL_SERVER', 'mail.o2switch.net')
    MAIL_PORT: int = int(os.getenv('MAIL_PORT', 587))
    MAIL_USE_TLS: bool = os.getenv('MAIL_USE_TLS', 'True').lower() == 'true'
    MAIL_USERNAME: Optional[str] = os.getenv('MAIL_USERNAME')
    MAIL_PASSWORD: Optional[str] = os.getenv('MAIL_PASSWORD')
    MAIL_DEFAULT_SENDER: str = os.getenv(
        'MAIL_DEFAULT_SENDER', 
        'noreply@story.cosmail.fr'
    )
    
    # Uploads
    UPLOAD_FOLDER: str = os.path.join(
        os.path.dirname(__file__), 
        'uploads'
    )
    MAX_CONTENT_LENGTH: int = 16 * 1024 * 1024  # 16 MB max
    
    # Rate Limiting
    RATELIMIT_STORAGE_URL: str = "memory://"  # En mémoire pour l'instant
    
    # Application
    ENVIRONMENT: str = os.getenv('ENVIRONMENT', 'production')

