"""
Настройки JWT токенов для аутентификации.
"""
from datetime import timedelta


# ==============================================
# SIMPLE JWT SETTINGS
# ==============================================

SIMPLE_JWT = {
    # Время жизни access токена (3 часа - достаточно для длинных уроков)
    'ACCESS_TOKEN_LIFETIME': timedelta(hours=3),
    
    # Время жизни refresh токена (7 дней)
    'REFRESH_TOKEN_LIFETIME': timedelta(days=7),
    
    # Обновлять refresh токен при каждом использовании
    'ROTATE_REFRESH_TOKENS': True,
    
    # Добавлять старые refresh токены в blacklist
    'BLACKLIST_AFTER_ROTATION': True,
    
    # Обновлять last_login при получении токена
    'UPDATE_LAST_LOGIN': True,
    
    # Алгоритм подписи токена
    'ALGORITHM': 'HS256',
    
    # Ключ для подписи (из settings)
    'SIGNING_KEY': None,  # Будет взят SECRET_KEY из settings
    
    # Верификация подписи
    'VERIFYING_KEY': None,
    
    # Аудитория
    'AUDIENCE': None,
    'ISSUER': None,
    
    # Заголовки
    'AUTH_HEADER_TYPES': ('Bearer',),
    'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
    
    # Claim'ы токена
    'USER_ID_FIELD': 'id',
    'USER_ID_CLAIM': 'user_id',
    
    # Дополнительные claim'ы
    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
    'TOKEN_TYPE_CLAIM': 'token_type',
    
    # Leeway для учета расхождения времени между серверами
    'JTI_CLAIM': 'jti',
    'LEEWAY': 0,
    
    # Sliding tokens (не используем)
    'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
    'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
    'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
}

