"""
i18n configuration for StreamA2026 backend
"""
from babel import Locale
from typing import Dict
import os

# Supported languages
SUPPORTED_LANGUAGES = ['de', 'en']
DEFAULT_LANGUAGE = 'de'

# Translation directory
TRANSLATIONS_DIR = os.path.join(os.path.dirname(__file__), 'translations')

# Simple translation dictionary (can be extended to use Babel's gettext)
TRANSLATIONS: Dict[str, Dict[str, str]] = {
    'de': {
        # Common
        'loading': 'Laden...',
        'save': 'Speichern',
        'cancel': 'Abbrechen',
        'delete': 'Löschen',
        'edit': 'Bearbeiten',
        'close': 'Schließen',
        'search': 'Suchen',
        'upload': 'Hochladen',
        'download': 'Herunterladen',
        'back': 'Zurück',
        'next': 'Weiter',
        'previous': 'Zurück',
        'submit': 'Absenden',
        'yes': 'Ja',
        'no': 'Nein',
        'or': 'oder',
        'optional': 'Optional',
        
        # Auth
        'login_success': 'Erfolgreich angemeldet',
        'register_success': 'Erfolgreich registriert',
        'login_failed': 'Anmeldung fehlgeschlagen',
        'register_failed': 'Registrierung fehlgeschlagen',
        'invalid_credentials': 'Ungültige Anmeldedaten',
        'weak_password': 'Passwort zu schwach',
        'user_not_found': 'Benutzer nicht gefunden',
        'invalid_token': 'Ungültiger Token',
        'token_expired': 'Token abgelaufen',
        
        # Streams
        'stream_not_found': 'Stream nicht gefunden',
        'stream_created': 'Stream erfolgreich erstellt',
        'stream_updated': 'Stream erfolgreich aktualisiert',
        'stream_deleted': 'Stream erfolgreich gelöscht',
        'stream_delete_confirm': 'Möchtest du diesen Stream wirklich löschen?',
        'no_streams': 'Keine Streams verfügbar',
        'loading_streams': 'Lade Streams...',
        
        # Comments
        'comment_not_found': 'Kommentar nicht gefunden',
        'comment_created': 'Kommentar erfolgreich erstellt',
        'comment_updated': 'Kommentar erfolgreich aktualisiert',
        'comment_deleted': 'Kommentar erfolgreich gelöscht',
        'no_comments': 'Keine Kommentare verfügbar',
        
        # Users
        'user_created': 'Benutzer erfolgreich erstellt',
        'user_updated': 'Benutzer erfolgreich aktualisiert',
        'user_deleted': 'Benutzer erfolgreich gelöscht',
        'user_not_authorized': 'Nicht autorisiert',
        'forbidden': 'Zugriff verweigert',
        
        # Errors
        'validation_error': 'Validierungsfehler',
        'server_error': 'Serverfehler',
        'network_error': 'Netzwerkfehler',
        'not_found': 'Nicht gefunden',
        'bad_request': 'Ungültige Anfrage',
    },
    'en': {
        # Common
        'loading': 'Loading...',
        'save': 'Save',
        'cancel': 'Cancel',
        'delete': 'Delete',
        'edit': 'Edit',
        'close': 'Close',
        'search': 'Search',
        'upload': 'Upload',
        'download': 'Download',
        'back': 'Back',
        'next': 'Next',
        'previous': 'Previous',
        'submit': 'Submit',
        'yes': 'Yes',
        'no': 'No',
        'or': 'or',
        'optional': 'Optional',
        
        # Auth
        'login_success': 'Successfully logged in',
        'register_success': 'Successfully registered',
        'login_failed': 'Login failed',
        'register_failed': 'Registration failed',
        'invalid_credentials': 'Invalid credentials',
        'weak_password': 'Password too weak',
        'user_not_found': 'User not found',
        'invalid_token': 'Invalid token',
        'token_expired': 'Token expired',
        
        # Streams
        'stream_not_found': 'Stream not found',
        'stream_created': 'Stream created successfully',
        'stream_updated': 'Stream updated successfully',
        'stream_deleted': 'Stream deleted successfully',
        'stream_delete_confirm': 'Are you sure you want to delete this stream?',
        'no_streams': 'No streams available',
        'loading_streams': 'Loading streams...',
        
        # Comments
        'comment_not_found': 'Comment not found',
        'comment_created': 'Comment created successfully',
        'comment_updated': 'Comment updated successfully',
        'comment_deleted': 'Comment deleted successfully',
        'no_comments': 'No comments available',
        
        # Users
        'user_created': 'User created successfully',
        'user_updated': 'User updated successfully',
        'user_deleted': 'User deleted successfully',
        'user_not_authorized': 'Not authorized',
        'forbidden': 'Forbidden',
        
        # Errors
        'validation_error': 'Validation error',
        'server_error': 'Server error',
        'network_error': 'Network error',
        'not_found': 'Not found',
        'bad_request': 'Bad request',
    }
}


def get_translation(key: str, language: str = DEFAULT_LANGUAGE) -> str:
    """
    Get a translation for a given key and language.
    
    Args:
        key: The translation key
        language: The language code (default: DEFAULT_LANGUAGE)
    
    Returns:
        The translated string, or the key if not found
    """
    if language not in SUPPORTED_LANGUAGES:
        language = DEFAULT_LANGUAGE
    
    return TRANSLATIONS.get(language, {}).get(key, key)


def get_supported_languages() -> list[str]:
    """Get the list of supported languages."""
    return SUPPORTED_LANGUAGES


def is_language_supported(language: str) -> bool:
    """Check if a language is supported."""
    return language in SUPPORTED_LANGUAGES
