from django.db import models
from django.utils.text import slugify
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _

class News(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    title_image = models.ImageField(upload_to='news_images/', default='images/default_header.jpg', 
        blank=True, null=True, help_text="Main image for the news article")
    published_date = models.DateTimeField(auto_now_add=True)
    updated_date = models.DateTimeField(auto_now=True)
    slug = models.SlugField(unique=True, max_length=255)
    is_published = models.BooleanField(default=True)
    
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
            # Handle duplicate slugs
            counter = 1
            while News.objects.filter(slug=self.slug).exists():
                self.slug = f"{slugify(self.title)}-{counter}"
                counter += 1
        super().save(*args, **kwargs)
    
    def __str__(self):
        return self.title
    
    class Meta:
        verbose_name_plural = "News"
        ordering = ['-published_date']

class NewsImage(models.Model):
    news = models.ForeignKey(News, related_name='images', on_delete=models.CASCADE)
    image = models.ImageField(upload_to='news_images/')
    caption = models.CharField(max_length=255, blank=True, null=True)
    
    def __str__(self):
        return f"Image for {self.news.title}"
    
class GalleryImage(models.Model):
    image = models.ImageField(upload_to='gallery_images/')
    uploaded_at = models.DateTimeField(auto_now_add=True)
    is_featured = models.BooleanField(default=False)
    
    def __str__(self):
        return f"Gallery Image {self.id}"
    
    class Meta:
        ordering = ['-uploaded_at']

class Vacancy(models.Model):
    job_title = models.CharField(max_length=200)
    description = models.TextField()
    application_deadline = models.DateField()
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    
    def clean(self):
        # Validate application deadline
        from datetime import date
        if self.application_deadline and self.application_deadline < date.today():
            raise ValidationError({'application_deadline': _('Deadline cannot be in the past')})
    
    def __str__(self):
        return self.job_title
    
    class Meta:
        verbose_name_plural = "Vacancies"
        ordering = ['-created_at']

class StaffMember(models.Model):
    GENDER_CHOICES = [
        ('M', 'Male'),
        ('F', 'Female'),
    ]
    
    name = models.CharField(max_length=200)
    position = models.CharField(max_length=200)
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
    profile_picture = models.ImageField(upload_to='staff_images/')
    
    # Social Media Handle Visibility Options
    show_facebook = models.BooleanField(default=True)
    show_twitter = models.BooleanField(default=True)
    show_linkedin = models.BooleanField(default=True)
    
    # Social Media Handles
    facebook_handle = models.CharField(max_length=100, blank=True, null=True)
    twitter_handle = models.CharField(max_length=100, blank=True, null=True)
    linkedin_handle = models.CharField(max_length=100, blank=True, null=True)
    
    def save(self, *args, **kwargs):
        if not self.profile_picture:
            if self.gender == 'M':
                self.profile_picture = 'images/default_male.png'
            elif self.gender == 'F':
                self.profile_picture = 'images/default_female.png'
        super().save(*args, **kwargs)

    def __str__(self):
        return f"{self.name} - {self.position}"

    
    class Meta:
        ordering = ['name']

class Testimonial(models.Model):
    ROLE_CHOICES = [
        ('STUDENT', 'Student'),
        ('PARENT', 'Parent'),
        ('TEACHER', 'Teacher'),
        ('ALUMNI', 'Alumni'),
    ]
    
    role = models.CharField(max_length=20, choices=ROLE_CHOICES)
    testimony = models.TextField()
    date = models.DateTimeField(auto_now_add=True)
    is_featured = models.BooleanField(default=False)
    
    def __str__(self):
        return f"({self.get_role_display()})"
    
    class Meta:
        verbose_name_plural = "Testimonials"
        ordering = ['-date']