from rest_framework import serializers from django.utils.translation import gettext_lazy as _ from ..models import ( Hadis, HadisStatus, HadisTag, HadisTransmitter, HadisReference, ReferenceImage, Transmitters ) from apps.library.serializers import BookSerializer class HadisListSerializer(serializers.ModelSerializer): """Serializer for Hadis list""" category = serializers.SerializerMethodField() translation = serializers.SerializerMethodField() class Meta: model = Hadis fields = ['id', 'number', 'title', 'category', 'translation'] def get_category(self, obj): """Get category id and title""" if obj.category: return { 'id': obj.category.id, 'title': obj.category.title } return None def get_translation(self, obj): """Get translation based on request language""" request = self.context.get('request') language_code = getattr(request, 'LANGUAGE_CODE', 'en') return obj.get_translation(language_code) class HadisStatusSerializer(serializers.ModelSerializer): """Serializer for HadisStatus""" class Meta: model = HadisStatus fields = ['id', 'title', 'color'] class HadisTagSerializer(serializers.ModelSerializer): """Serializer for HadisTag""" class Meta: model = HadisTag fields = ['id', 'title'] class TransmitterSerializer(serializers.ModelSerializer): """Serializer for Transmitters""" class Meta: model = Transmitters fields = [ 'id', 'full_name', 'birth_year_hijri', 'death_year_hijri', 'description' ] class HadisTransmitterSerializer(serializers.ModelSerializer): """Serializer for HadisTransmitter with transmitter details""" transmitter = TransmitterSerializer(read_only=True) class Meta: model = HadisTransmitter fields = [ 'id', 'transmitter', 'order', 'is_gap' ] class ReferenceImageSerializer(serializers.ModelSerializer): """Serializer for ReferenceImage""" thumbnail = serializers.SerializerMethodField() class Meta: model = ReferenceImage fields = ['id', 'thumbnail', 'priority'] def get_thumbnail(self, obj): """Get thumbnail URL""" if obj.image: request = self.context.get('request') if request: return request.build_absolute_uri(obj.image.url) return obj.image.url return None class HadisReferenceSerializer(serializers.ModelSerializer): """Serializer for HadisReference with book and images""" book = BookSerializer(read_only=True) images = ReferenceImageSerializer(many=True, read_only=True) class Meta: model = HadisReference fields = [ 'id', 'book', 'page_number', 'hadis_number_in_book', 'description', 'images' ] class HadisDetailSerializer(serializers.ModelSerializer): """Detailed serializer for Hadis with all related objects""" hadis_status = HadisStatusSerializer(read_only=True) tags = HadisTagSerializer(many=True, read_only=True) transmitters = HadisTransmitterSerializer( source='hadistransmitter_set', many=True, read_only=True ) references = HadisReferenceSerializer( source='hadisreference_set', many=True, read_only=True ) category = serializers.SerializerMethodField() translation = serializers.SerializerMethodField() class Meta: model = Hadis fields = [ 'id', 'number', 'title', 'text', 'translation', 'explanation', 'address', 'hadis_status_text', 'links', 'status', 'category', 'hadis_status', 'tags', 'transmitters', 'references' ] def get_category(self, obj): """Get category details""" if obj.category: return { 'id': obj.category.id, 'title': obj.category.title, 'category_type': obj.category.category_type } return None def get_translation(self, obj): """Get translation based on request language""" request = self.context.get('request') language_code = getattr(request, 'LANGUAGE_CODE', 'en') return obj.get_translation(language_code)