from django.db import models
from django.utils.translation import gettext_lazy as _


class Ad(models.Model):
    """Ad Model"""
    ACTION_TYPES = [
        ('offers', _('Offers')),
        ('place', _('Place')),
        ('external_url', _('External URL')),
        ('category', _('Category')),
        ('filter_by_rating', _('Filter by Rating')),
        ('booking', _('Booking')),
    ]

    title = models.CharField(max_length=200, verbose_name=_('Title'))
    subtitle = models.CharField(max_length=300, verbose_name=_('Subtitle'))
    image = models.ImageField(upload_to='ads/', verbose_name=_('Image'))
    action_type = models.CharField(
        max_length=50,
        choices=ACTION_TYPES,
        verbose_name=_('Action Type')
    )
    action_data = models.JSONField(
        default=dict,
        blank=True,
        verbose_name=_('Action Data')
    )
    is_active = models.BooleanField(default=True, verbose_name=_('Is Active'))
    start_date = models.DateTimeField(verbose_name=_('Start Date'))
    end_date = models.DateTimeField(verbose_name=_('End Date'))
    priority = models.IntegerField(default=0, verbose_name=_('Priority'))
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name = _('Ad')
        verbose_name_plural = _('Ads')
        ordering = ['-priority', '-created_at']
        indexes = [
            models.Index(fields=['is_active', 'start_date', 'end_date']),
            models.Index(fields=['action_type']),
        ]

    def __str__(self):
        return self.title

    @property
    def is_valid(self):
        from django.utils import timezone
        now = timezone.now()
        return self.is_active and self.start_date <= now <= self.end_date
