from rest_framework import serializers
from .models import *
from common.common import getLanguage
from mama_care_api.settings import languageKey
# FAQ

class FAQCategorySerializer(serializers.ModelSerializer):
    title = serializers.SerializerMethodField()
    faqList = serializers.SerializerMethodField()

    class Meta:
        model = FAQCategory
        fields = ["id", "createdDate", "updatedDate", "title", "faqList"]

    def get_title(self, instance):
        languageId = getLanguage(self)
        if languageId is not None:
            faqCategoryLanguageList = FAQCategoryLanguage.objects.filter(
                faqCategoryId=str(instance.id)
            ).filter(languageId=languageId)
            if faqCategoryLanguageList.__len__() > 0:
                return faqCategoryLanguageList[0].title

    def get_faqList(self, instance):
        languageId = getLanguage(self)
        dataList = FAQ.objects.filter(faqCategoryId=instance.id)
        return FAQSerializer(
            dataList, context={languageKey: languageId}, many=True
        ).data


class FAQCategoryLanguageSerializer(serializers.ModelSerializer):
    class Meta:
        model = FAQCategoryLanguage
        fields = [
            "id",
            "title",
            "createdDate",
            "updatedDate",
            "faqCategoryId",
            languageKey,
        ]


class FAQSerializer(serializers.ModelSerializer):
    question = serializers.SerializerMethodField()
    answer = serializers.SerializerMethodField()

    class Meta:
        model = FAQ
        fields = [
            "id",
            "createdDate",
            "updatedDate",
            "faqCategoryId",
            "question",
            "answer",
        ]

    def get_question(self, instance):
        languageId = getLanguage(self)
        if languageId is not None:
            faqLanguageList = FAQLanguage.objects.filter(faqId=str(instance.id)).filter(
                languageId=languageId
            )
            if faqLanguageList.__len__() > 0:
                return faqLanguageList[0].question

    def get_answer(self, instance):
        languageId = getLanguage(self)
        if languageId is not None:
            faqLanguageList = FAQLanguage.objects.filter(faqId=str(instance.id)).filter(
                languageId=languageId
            )
            if faqLanguageList.__len__() > 0:
                return faqLanguageList[0].answer


class FAQLanguageSerializer(serializers.ModelSerializer):
    class Meta:
        model = FAQLanguage
        fields = [
            "id",
            "question",
            "answer",
            "createdDate",
            "updatedDate",
            "faqId",
            languageKey,
        ]

#Information Type

class InformationTypeSerializer(serializers.ModelSerializer):
    informationList = serializers.SerializerMethodField()
    class Meta:
        model = InformationType
        fields = ["id", "keyName","informationList"]
    
    def get_informationList(self,instance):
        languageId = getLanguage(self)
        dataList = Information.objects.filter(informationTypeId__keyName = instance.keyName)
        return InformationSerializer(dataList,context={languageKey:languageId},many=True).data

#Information

class InformationSerializer(serializers.ModelSerializer):
    title = serializers.SerializerMethodField()
    sectionList = serializers.SerializerMethodField()
    class Meta:
        model = Information
        fields = [
            "id",
            "informationTypeId",
            "createdDate",
            "updatedDate",
            "title",
            "sectionList"
        ]
    
    def get_title(self, instance):
        languageId = getLanguage(self)
        if languageId is not None:
            informationLanguage = InformationLanguage.objects.filter(
                informationId=str(instance.id)
            ).filter(languageId=languageId)
            if informationLanguage.__len__() > 0:
                return informationLanguage[0].title
    
    def get_sectionList(self,instance):
        languageId = getLanguage(self)
        dataList = Section.objects.filter(informationId = instance.id)
        return SectionSerializer(dataList,context={languageKey:languageId},many=True).data

class InformationLanguageSerializer(serializers.ModelSerializer):

    class Meta:
        model = InformationLanguage
        fields = [
            "id",
            "title",
            "createdDate",
            "updatedDate",
            "informationId",
            languageKey,
        ]

#Section

class SectionSerializer(serializers.ModelSerializer):
    description = serializers.SerializerMethodField()
    contentList = serializers.SerializerMethodField()
    class Meta:
        model = Section
        fields = [
            "id",
            "keyName",
            "createdDate",
            "updatedDate",
            "informationId",
            "description",
            "contentList",
        ]
    def get_description(self, instance):
        languageId = getLanguage(self)
        if languageId is not None:
            sectionLanguage = SectionLanguage.objects.filter(
                sectionId=str(instance.id)
            ).filter(languageId=languageId)
            if sectionLanguage.__len__() > 0:
                return sectionLanguage[0].description
    
    def get_contentList(self,instance):
        languageId = getLanguage(self)
        dataList = Content.objects.filter(sectionId = instance.id)
        return ContentSerializer(dataList,context={languageKey:languageId},many=True).data


class SectionLanguageSerializer(serializers.ModelSerializer):

    class Meta:
        model = SectionLanguage
        fields = [
            "id",
            "description",
            "createdDate",
            "updatedDate",
            "sectionId",
            languageKey,
        ]



#Content

class ContentSerializer(serializers.ModelSerializer):
    description = serializers.SerializerMethodField()
    class Meta:
        model = Content
        fields = [
            "id",
            "keyName",
            "createdDate",
            "updatedDate",
            "sectionId",
            "description",
        ]

    def get_description(self, instance):
        languageId = getLanguage(self)
        if languageId is not None:
            contentLanguage = ContentLanguage.objects.filter(
                contentId=str(instance.id)
            ).filter(languageId=languageId)
            if contentLanguage.__len__() > 0:
                return contentLanguage[0].description

class ContentLanguageSerializer(serializers.ModelSerializer):

    class Meta:
        model = ContentLanguage
        fields = [
            "id",
            "description",
            "createdDate",
            "updatedDate",
            "contentId",
            languageKey,
        ]
