from rest_framework import generics
from django.shortcuts import get_object_or_404

from .models import Language, Currency, Category, CategoryTranslation, DocumentType
from .serializers import (
    LanguageSerializer, CurrencySerializer, CategorySerializer, DocumentTypeSerializer,
)


class LanguageListView(generics.ListAPIView):
    queryset = Language.objects.filter(is_active=True).order_by('code')
    serializer_class = LanguageSerializer


class CurrencyListView(generics.ListAPIView):
    queryset = Currency.objects.filter(is_active=True).order_by('code')
    serializer_class = CurrencySerializer


class CategoryListView(generics.ListAPIView):
    serializer_class = CategorySerializer

    def get_queryset(self):
        qs = Category.objects.filter(is_active=True).order_by('name')
        return qs

    def list(self, request, *args, **kwargs):
        language_code = request.query_params.get('language')
        queryset = self.get_queryset()
        serializer = self.get_serializer(queryset, many=True)
        data = serializer.data
        if language_code:
            # attach translated name if available
            for item in data:
                cat_id = item['id']
                try:
                    trans = CategoryTranslation.objects.get(category_id=cat_id, language__code=language_code)
                    item['translated_name'] = trans.name
                except CategoryTranslation.DoesNotExist:
                    item['translated_name'] = None
        return self.get_paginated_response(data) if self.paginator else Response(data)


class DocumentTypeListView(generics.ListAPIView):
    queryset = DocumentType.objects.filter(is_active=True).order_by('name')
    serializer_class = DocumentTypeSerializer
