from django.db import models
from django.utils.text import slugify

class College(models.Model):
    name = models.CharField(max_length=255)
    slug = models.SlugField(max_length=255, unique=True)
    short_description = models.TextField()
    priority_order = models.PositiveIntegerField(default=0, help_text="Lower numbers appear first")
    
    class Meta:
        ordering = ['priority_order', 'name']
    
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        super().save(*args, **kwargs)
    
    def __str__(self):
        return self.name

class HeroSection(models.Model):
    college = models.OneToOneField(College, on_delete=models.CASCADE, related_name='hero_section')
    title = models.CharField(max_length=255)
    subtitle = models.TextField()
    background_image = models.ImageField(upload_to='college_images/hero')
    admission_info = models.CharField(max_length=255)
    
    def __str__(self):
        return f"Hero Section for {self.college.name}"

class Badge(models.Model):
    hero_section = models.ForeignKey(HeroSection, on_delete=models.CASCADE, related_name='badges')
    text = models.CharField(max_length=100)
    
    def __str__(self):
        return self.text

class AboutSection(models.Model):
    college = models.OneToOneField(College, on_delete=models.CASCADE, related_name='about_section')
    title = models.CharField(max_length=255)
    image = models.ImageField(upload_to='college_images/about')
    
    def __str__(self):
        return f"About Section for {self.college.name}"

class AboutContent(models.Model):
    about_section = models.ForeignKey(AboutSection, on_delete=models.CASCADE, related_name='content_paragraphs')
    content = models.TextField()
    order = models.PositiveIntegerField(default=0)
    
    class Meta:
        ordering = ['order']
    
    def __str__(self):
        return f"Paragraph {self.order} for {self.about_section.college.name}"

class DirectorSection(models.Model):
    college = models.OneToOneField(College, on_delete=models.CASCADE, related_name='director_section')
    name = models.CharField(max_length=255)
    title = models.CharField(max_length=255)
    message = models.TextField()
    image = models.ImageField(upload_to='college_images/directors')
    
    def __str__(self):
        return f"Director: {self.name} for {self.college.name}"

class ProgramsSection(models.Model):
    college = models.OneToOneField(College, on_delete=models.CASCADE, related_name='programs_section')
    title = models.CharField(max_length=255)
    description = models.TextField()
    has_doctoral_programs = models.BooleanField(default=False)
    
    def __str__(self):
        return f"Programs Section for {self.college.name}"

class Program(models.Model):
    PROGRAM_TYPES = (
        ('UG', 'Undergraduate'),
        ('PG', 'Postgraduate'),
        ('DP', 'Diploma'),
    )
    
    programs_section = models.ForeignKey(ProgramsSection, on_delete=models.CASCADE, related_name='programs')
    name = models.CharField(max_length=255)
    # link = models.CharField(max_length=255)
    course = models.ForeignKey('courses.Course', on_delete=models.CASCADE, related_name='programs', null=True, blank=True)
    program_type = models.CharField(max_length=2, choices=PROGRAM_TYPES)
    order = models.PositiveIntegerField(default=0)
    
    class Meta:
        ordering = ['program_type', 'order']
    
    def __str__(self):
        return f"{self.name} ({self.get_program_type_display()})"

class WhyChooseSection(models.Model):
    college = models.OneToOneField(College, on_delete=models.CASCADE, related_name='why_choose_section')
    title = models.CharField(max_length=255)
    description = models.TextField()
    conclusion = models.TextField()
    image = models.ImageField(upload_to='college_images/why_choose')
    
    def __str__(self):
        return f"Why Choose Section for {self.college.name}"

class Feature(models.Model):
    why_choose_section = models.ForeignKey(WhyChooseSection, on_delete=models.CASCADE, related_name='features')
    text = models.CharField(max_length=255)
    order = models.PositiveIntegerField(default=0)
    
    class Meta:
        ordering = ['order']
    
    def __str__(self):
        return self.text

class FacultySection(models.Model):
    college = models.OneToOneField(College, on_delete=models.CASCADE, related_name='faculty_section')
    title = models.CharField(max_length=255)
    description = models.TextField()
    
    def __str__(self):
        return f"Faculty Section for {self.college.name}"

class Faculty(models.Model):
    faculty_section = models.ForeignKey(FacultySection, on_delete=models.CASCADE, related_name='faculty_members')
    name = models.CharField(max_length=255)
    position = models.CharField(max_length=255, null=True, blank=True)
    department = models.CharField(max_length=255, null=True, blank=True)
    qualifications = models.TextField(null=True, blank=True)
    image = models.ImageField(upload_to='college_images/faculty')
    
    def __str__(self):
        return f"{self.name} - {self.position}"

class TestimonialSection(models.Model):
    college = models.OneToOneField(College, on_delete=models.CASCADE, related_name='testimonial_section')
    title = models.CharField(max_length=255)
    
    def __str__(self):
        return f"Testimonial Section for {self.college.name}"

class Testimonial(models.Model):
    testimonial_section = models.ForeignKey(TestimonialSection, on_delete=models.CASCADE, related_name='testimonials')
    name = models.CharField(max_length=255)
    course = models.CharField(max_length=255)
    company = models.CharField(max_length=255)
    testimonial = models.TextField()
    image = models.ImageField(upload_to='college_images/testimonials')
    
    def __str__(self):
        return f"Testimonial from {self.name}"

class RecruitersSection(models.Model):
    college = models.OneToOneField(College, on_delete=models.CASCADE, related_name='recruiters_section')
    title = models.CharField(max_length=255)
    
    def __str__(self):
        return f"Recruiters Section for {self.college.name}"

class Recruiter(models.Model):
    recruiters_section = models.ForeignKey(RecruitersSection, on_delete=models.CASCADE, related_name='recruiters')
    name = models.CharField(max_length=255)
    logo = models.ImageField(upload_to='college_images/recruiters')
    
    def __str__(self):
        return self.name

class InfrastructureSection(models.Model):
    college = models.OneToOneField(College, on_delete=models.CASCADE, related_name='infrastructure_section')
    title = models.CharField(max_length=255)
    description = models.TextField()
    
    def __str__(self):
        return f"Infrastructure Section for {self.college.name}"

class Facility(models.Model):
    infrastructure_section = models.ForeignKey(InfrastructureSection, on_delete=models.CASCADE, related_name='facilities')
    title = models.CharField(max_length=255)
    description = models.TextField()
    image = models.ImageField(upload_to='college_images/facilities')
    order = models.PositiveIntegerField(default=0)
    
    class Meta:
        ordering = ['order']
        verbose_name_plural = 'Facilities'
    
    def __str__(self):
        return f"{self.title} - {self.infrastructure_section.college.name}"

