from django.db import models
from blog.models import BlogCategory, BlogPost
# Create your models here.

class AdBanner(models.Model):

    PLACEMENT_CHOICES = [
        ("inline", "Inline"),
        ("end_of_post", "End of Post"),
        ("sidebar", "Sidebar"),
    ]

    title = models.CharField(max_length=200)
    message = models.TextField()

    cta_text = models.CharField(max_length=100)
    
    cta_url = models.URLField(max_length=500)

    placement = models.CharField(
        max_length=50,
        choices=PLACEMENT_CHOICES
    )

    # Targeting
    category = models.ForeignKey(
        BlogCategory,
        null=True,
        blank=True,
        on_delete=models.SET_NULL
    )

    blog = models.ForeignKey(
        BlogPost,
        null=True,
        blank=True,
        on_delete=models.SET_NULL
    )

    image = models.ImageField(
        upload_to="adverts/banners/",
        blank=True,
        null=True
    )

    is_active = models.BooleanField(default=True)

    starts_at = models.DateTimeField(null=True, blank=True)

    ends_at = models.DateTimeField(null=True, blank=True)

    priority = models.IntegerField(default=1)  # higher = more important

    created_at = models.DateTimeField(auto_now_add=True)


class BannerEvent(models.Model):

    EVENT_TYPES = [
        ("impression", "Impression"),
        ("click", "Click"),
    ]

    banner = models.ForeignKey(AdBanner, on_delete=models.CASCADE)
    visitor_id = models.CharField(max_length=100)

    blog = models.ForeignKey(
        BlogPost,
        null=True,
        blank=True,
        on_delete=models.CASCADE
    )

    event_type = models.CharField(max_length=20, choices=EVENT_TYPES)

    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        indexes = [
            models.Index(fields=["banner", "visitor_id"]),
            models.Index(fields=["blog"]),
        ]