from rest_framework import serializers
from job_companies.models.job_company import JobCompanies
from jobs_company_benefitss.serializer.job_company_benefits_serializer import JobCompanyBenefitsSerializer
from jobs_company_culture.serializer.job_company_culture_serializer import JobCompanyCultureSerializer
from job_company_team_members.serializer.job_company_team_members_serializer import JobCompanyTeamSerializer
from benefit.serializers.benefits_serializer import BenefitsSerializer
from benefit.models.benefits import Benefits

# class BenefitDataSerializer(serializers.Serializer):
#     name = serializers.CharField()
#     icon = serializers.CharField(required=False, allow_blank=True)

class JobCompanySerializer(serializers.ModelSerializer):
    # benefits_of_company = JobCompanyBenefitsSerializer(many=True, read_only=True)
    # company_benefits = BenefitsSerializer(many=True)
    culture_of_company = JobCompanyCultureSerializer(many=True, read_only=True)
    team_of_company = JobCompanyTeamSerializer(many=True, read_only=True)
    company_benefits = BenefitsSerializer(many=True)
    # profile_picture_url_path = serializers.SerializerMethodField('get_profile_url')
    # cover_picture_url_path = serializers.SerializerMethodField('get_cover_url')

    class Meta:
        model = JobCompanies
        fields = ['id', 'name', 'slogan', 'industry', 'location' ,'work_type' ,'employee_range','overview','profile_picture','profile_picture_url','cover_picture','cover_picture_url','website_url' ,'facebook_url','instagram_url', 'culture_of_company', 'team_of_company', 'company_benefits','contact_number']
        read_only_fields = ['id','created_at','updated_at', 'culture', 'team']
    
    def create(self, validated_data):
        benefits_data = validated_data.pop('company_benefits', [])  # get list of benefits dicts
        company = JobCompanies.objects.create(**validated_data)

        for benefit in benefits_data:
            benefit_obj, created = Benefits.objects.get_or_create(**benefit)
            # Benefits model has a FK named `company`
            benefit_obj.company = company
            benefit_obj.save()

        return company
    
    def update(self, instance, validated_data):
        benefits_data = validated_data.pop('company_benefits', [])

        # Update the main JobCompanies fields
        for attr, value in validated_data.items():
            setattr(instance, attr, value)
        instance.save()

        # Optional: Clear existing benefits if needed
        instance.company_benefits.all().delete()

        # Create new benefits
        for benefit in benefits_data:
            Benefits.objects.create(company=instance, **benefit)

        return instance
    

    # def get_profile_url(self, obj):
    #     request = self.context.get("request")
    #     if obj.profile_picture and hasattr(obj.profile_picture, 'url'):
    #         return request.build_absolute_uri(obj.profile_picture.url)
    #     return None
    
    # def get_cover_url(self, obj):
    #     request = self.context.get("request")
    #     if obj.cover_picture and hasattr(obj.cover_picture, 'url'):
    #         return request.build_absolute_uri(obj.cover_picture.url)
    #     return None
    
    # def create(self, validated_data):
    #     benefits_data = validated_data.pop('company_benefits',[])
    #     company_data = JobCompanies.objects.create(**validated_data)
    #     for benefit in benefits_data:
    #         Benefits.objects.create(**benefit)
    #     return company_data


class JobCompanyListSerializer(serializers.ModelSerializer):

    class Meta:
        model = JobCompanies
        fields = ['id', 'name', 'location', 'profile_picture']
        read_only_fields = ['id']

    # 'name', 'slogan', 'industry', 'location' ,'work_type' ,'employee_range','overview','profile_picture','cover_picture' ,'website_url' ,'facebook_url','instagram_url'

class JobCompanyListdropSerializer(serializers.ModelSerializer):

    class Meta:
        model = JobCompanies
        fields = ['id', 'name', 'location', 'profile_picture','profile_picture_url']
        read_only_fields = ['id']
