from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models


class ReminderLog(models.Model):
    """Dedup record: has `reminder_key` already fired for this object today?

    One row per (object, reminder_key, date) — the unique constraint is the
    entire mechanism; callers do get_or_create and check `created`.
    """
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.CharField(max_length=64)
    content_object = GenericForeignKey('content_type', 'object_id')
    reminder_key = models.CharField(max_length=50)
    sent_date = models.DateField()
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = "scheduler_reminder_logs"
        constraints = [
            models.UniqueConstraint(
                fields=["content_type", "object_id", "reminder_key", "sent_date"],
                name="uniq_reminder_per_object_key_date",
            )
        ]
        indexes = [models.Index(fields=["content_type", "object_id", "reminder_key"])]

    def __str__(self):
        return f"{self.reminder_key} for {self.content_type}:{self.object_id} on {self.sent_date}"
