from django.db import models
from django_resized import ResizedImageField
from departments.models import Department
from django.utils import timezone


class Event(models.Model):
    EVENT_TYPES = [
        ('sunday_service', 'Sunday Service'),
        ('conference', 'Conference'),
        ('kesha', 'Kesha'),
        ('bible_study', 'Bible Study'),
        ('special_event', 'Special Event'),
    ]

    title = models.CharField(max_length=200)
    description = models.TextField()
    event_type = models.CharField(max_length=20, choices=EVENT_TYPES)
    location = models.CharField(max_length=200)
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()
    organizer = models.CharField(max_length=100, blank=True)
    department = models.ForeignKey(
        Department, on_delete=models.SET_NULL,
        null=True, blank=True
    )
    poster = ResizedImageField(
        size=[800, 600],
        quality=85,
        upload_to='events/posters/',
        blank=True, null=True,
        force_format='WEBP',
    )
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-start_date']

    def __str__(self):
        return f"{self.title} - {self.start_date.strftime('%b %d, %Y')}"

    @property
    def is_upcoming(self):
        return self.start_date > timezone.now()

    @property
    def duration(self):
        delta = self.end_date - self.start_date
        hours = delta.seconds // 3600
        minutes = (delta.seconds % 3600) // 60
        return f"{hours}h {minutes}m"

    def get_poster_url(self, request=None):
        if self.poster:
            if request:
                return request.build_absolute_uri(self.poster.url)
            return f"{settings.MEDIA_URL}{self.poster.name}"
        return None