from django.http import HttpResponseRedirect, FileResponse, Http404
from django.shortcuts import redirect
from django.views import View
from django.conf import settings

from .middleware import set_language
from .models import Language

import os


class SetLanguageView(View):
    """
    Vue pour changer la langue courante

    Usage:
        path('set-language/<str:language_code>/', SetLanguageView.as_view(), name='set_language'),

    Ou via GET parameter:
        /any-page/?lang=en
    """

    def get(self, request, language_code):
        """Change la langue et redirige vers la page precedente"""
        set_language(request, language_code)

        # Rediriger vers la page precedente ou l'accueil
        next_url = request.GET.get('next') or request.META.get('HTTP_REFERER') or '/'

        return HttpResponseRedirect(next_url)

    def post(self, request, language_code):
        """Change la langue via POST"""
        return self.get(request, language_code)


def set_language_view(request, language_code):
    """Vue fonctionnelle pour changer la langue"""
    set_language(request, language_code)
    next_url = request.GET.get('next') or request.META.get('HTTP_REFERER') or '/'
    return HttpResponseRedirect(next_url)


class TranslationGuideView(View):
    """
    Vue pour servir le guide des traductions HTML.

    Usage:
        path('guide/', TranslationGuideView.as_view(), name='guide'),

    Accessible via: /traduction/guide/ ou /traductions.html
    """

    def get(self, request):
        """Retourne le fichier HTML du guide"""
        # Chemin vers le fichier de documentation
        doc_path = os.path.join(settings.BASE_DIR, 'docs', 'traductions.html')

        if not os.path.exists(doc_path):
            raise Http404("Guide des traductions non trouvé")

        return FileResponse(
            open(doc_path, 'rb'),
            content_type='text/html'
        )
