from rest_framework import serializers
from colleges.models import (
    College, HeroSection, Badge, AboutSection, AboutContent,
    DirectorSection, ProgramsSection, Program, WhyChooseSection,
    Feature, FacultySection, Faculty, TestimonialSection, Testimonial,
    RecruitersSection, Recruiter, InfrastructureSection, Facility
)

class BadgeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Badge
        fields = ['text']

class HeroSectionSerializer(serializers.ModelSerializer):
    badges = BadgeSerializer(many=True, read_only=True)
    
    class Meta:
        model = HeroSection
        fields = ['title', 'subtitle', 'background_image', 'admission_info', 'badges']

class AboutContentSerializer(serializers.ModelSerializer):
    class Meta:
        model = AboutContent
        fields = ['content']

class AboutSectionSerializer(serializers.ModelSerializer):
    content_paragraphs = AboutContentSerializer(many=True, read_only=True)
    
    class Meta:
        model = AboutSection
        fields = ['title', 'image', 'content_paragraphs']

class DirectorSectionSerializer(serializers.ModelSerializer):
    class Meta:
        model = DirectorSection
        fields = ['name', 'title', 'message', 'image']

class ProgramSerializer(serializers.ModelSerializer):
    course_id = serializers.IntegerField(source='course.id', read_only=True)
    course_title = serializers.CharField(source='course.title', read_only=True)
    course_link = serializers.SerializerMethodField()
    duration = serializers.CharField(source='course.duration', read_only=True)

    def get_course_link(self, obj):
        if obj.course and obj.course.slug:
            return f"/academics/programs/courses/{obj.course.slug}/"
        return None

    class Meta:
        model = Program
        fields = ['name', 'program_type', 'course_id', 'course_title', 'course_link', 'duration']

class ProgramsSectionSerializer(serializers.ModelSerializer):
    programs = ProgramSerializer(many=True, read_only=True)
    
    class Meta:
        model = ProgramsSection
        fields = ['title', 'description', 'has_doctoral_programs', 'programs']

class FeatureSerializer(serializers.ModelSerializer):
    class Meta:
        model = Feature
        fields = ['text']

class WhyChooseSectionSerializer(serializers.ModelSerializer):
    features = FeatureSerializer(many=True, read_only=True)
    
    class Meta:
        model = WhyChooseSection
        fields = ['title', 'description', 'conclusion', 'image', 'features']

class FacultySerializer(serializers.ModelSerializer):
    class Meta:
        model = Faculty
        fields = ['name', 'position', 'department', 'qualifications', 'image']

class FacultySectionSerializer(serializers.ModelSerializer):
    faculty_members = FacultySerializer(many=True, read_only=True)
    
    class Meta:
        model = FacultySection
        fields = ['title', 'description', 'faculty_members']

class TestimonialSerializer(serializers.ModelSerializer):
    class Meta:
        model = Testimonial
        fields = ['name', 'course', 'company', 'testimonial', 'image']

class TestimonialSectionSerializer(serializers.ModelSerializer):
    testimonials = TestimonialSerializer(many=True, read_only=True)
    
    class Meta:
        model = TestimonialSection
        fields = ['title', 'testimonials']

class RecruiterSerializer(serializers.ModelSerializer):
    class Meta:
        model = Recruiter
        fields = ['name', 'logo']

class RecruitersSectionSerializer(serializers.ModelSerializer):
    recruiters = RecruiterSerializer(many=True, read_only=True)
    
    class Meta:
        model = RecruitersSection
        fields = ['title', 'recruiters']

class FacilitySerializer(serializers.ModelSerializer):
    class Meta:
        model = Facility
        fields = ['title', 'description', 'image']

class InfrastructureSectionSerializer(serializers.ModelSerializer):
    facilities = FacilitySerializer(many=True, read_only=True)
    
    class Meta:
        model = InfrastructureSection
        fields = ['title', 'description', 'facilities']

class CollegeSerializer(serializers.ModelSerializer):
    hero_section = HeroSectionSerializer(read_only=True)
    about_section = AboutSectionSerializer(read_only=True)
    director_section = DirectorSectionSerializer(read_only=True)
    programs_section = ProgramsSectionSerializer(read_only=True)
    why_choose_section = WhyChooseSectionSerializer(read_only=True)
    faculty_section = FacultySectionSerializer(read_only=True)
    testimonial_section = TestimonialSectionSerializer(read_only=True)
    recruiters_section = RecruitersSectionSerializer(read_only=True)
    infrastructure_section = InfrastructureSectionSerializer(read_only=True)
    
    class Meta:
        model = College
        fields = [
            'id', 'name', 'slug', 'short_description', 'priority_order',
            'hero_section', 'about_section', 'director_section',
            'programs_section', 'why_choose_section', 'faculty_section',
            'testimonial_section', 'recruiters_section', 'infrastructure_section'
        ]

