from django.db import models
from django.core.validators import MinValueValidator

# Create your models here.

class LeadershipCategory(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)
    description = models.TextField()
    order = models.PositiveIntegerField(
        default=0,
        validators=[MinValueValidator(0)],
        help_text="Order in which the category appears (lower numbers appear first)"
    )
    parent = models.ForeignKey(
        'self',
        on_delete=models.CASCADE,
        null=True,
        blank=True,
        related_name='subcategories',
        help_text="Parent category (for sub-committees)"
    )
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['order', 'name']
        verbose_name = 'Leadership Category'
        verbose_name_plural = 'Leadership Categories'

    def __str__(self):
        if self.parent:
            return f"{self.parent.name} - {self.name}"
        return self.name

class Leader(models.Model):
    name = models.CharField(max_length=100)
    title = models.CharField(max_length=100)
    description = models.TextField()
    category = models.ForeignKey(
        LeadershipCategory,
        on_delete=models.PROTECT,
        related_name='leaders',
        null=True,  # Temporarily allow null
        blank=True,  # Temporarily allow blank
        help_text="The leadership category this person belongs to (required)"
    )
    image = models.ImageField(
        upload_to='leaders/',
        null=True,
        blank=True,
        help_text="Profile photo. Recommended size: 400x400px, square format."
    )
    role = models.CharField(max_length=100, blank=True)
    organization = models.CharField(
        max_length=200,
        blank=True,
        default="Graduate Women Zambia"
    )
    
    # Social Media Links
    linkedin_url = models.URLField("LinkedIn Profile", blank=True)
    twitter_url = models.URLField("Twitter/X Profile", blank=True)
    facebook_url = models.URLField("Facebook Profile", blank=True)
    instagram_url = models.URLField("Instagram Profile", blank=True)
    website_url = models.URLField("Personal Website", blank=True)
    
    # Contact Information (Optional)
    email = models.EmailField(blank=True)
    phone = models.CharField(max_length=20, blank=True)
    twitter_url = models.URLField(
        blank=True,
        verbose_name="Twitter Profile URL"
    )
    linkedin_url = models.URLField(
        blank=True,
        verbose_name="LinkedIn Profile URL"
    )
    website_url = models.URLField(
        blank=True,
        verbose_name="Personal Website URL"
    )
    order = models.PositiveIntegerField(
        default=0,
        validators=[MinValueValidator(0)],
        help_text="Order in which the leader appears (lower numbers appear first)"
    )
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['order', 'name']
        verbose_name = 'Leader'
        verbose_name_plural = 'Leaders'

    def __str__(self):
        return f"{self.name} - {self.title}"

class Partner(models.Model):
    name = models.CharField(max_length=100)
    logo = models.ImageField(
        upload_to='partners/',
        help_text="Partner logo. Recommended size: 200x100px, transparent background."
    )
    website = models.URLField(blank=True)
    order = models.PositiveIntegerField(
        default=0,
        validators=[MinValueValidator(0)],
        help_text="Order in which the partner appears (lower numbers appear first)"
    )
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['order', 'name']
        verbose_name = 'Partner'
        verbose_name_plural = 'Partners'

    def __str__(self):
        return self.name
