"""Fixture execution tracking models for the provisioning engine."""

from __future__ import annotations

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

from simorgh.core.models import TimeStampedModel, UUIDModel


class FixtureRun(UUIDModel, TimeStampedModel):
    """Records each execution of a seed/reset/benchmark run for auditability."""

    class RunKind(models.TextChoices):
        SEED = "seed", _("Seed")
        RESET = "reset", _("Reset")
        BENCHMARK = "benchmark", _("Benchmark")
        SNAPSHOT_CREATE = "snapshot_create", _("Snapshot Create")
        SNAPSHOT_RESTORE = "snapshot_restore", _("Snapshot Restore")

    kind = models.CharField(_("run kind"), max_length=32, choices=RunKind.choices, db_index=True)
    tenant_slug = models.CharField(_("tenant slug"), max_length=64, blank=True, default="")
    workspace_slug = models.CharField(_("workspace slug"), max_length=64, blank=True, default="")
    fixture_names = models.JSONField(_("fixture names"), default=list)
    items_created = models.PositiveIntegerField(_("items created"), default=0)
    items_updated = models.PositiveIntegerField(_("items updated"), default=0)
    items_deleted = models.PositiveIntegerField(_("items deleted"), default=0)
    duration_ms = models.PositiveIntegerField(_("duration ms"), default=0)
    success = models.BooleanField(_("success"), default=True)
    error_message = models.TextField(_("error message"), blank=True, default="")
    meta = models.JSONField(_("metadata"), default=dict)

    class Meta:
        verbose_name = _("fixture run")
        verbose_name_plural = _("fixture runs")
        ordering = ("-created_at",)


class Snapshot(FixtureRun):
    """Represents a named database snapshot for test/dev state management."""

    class Meta:
        proxy = True
        verbose_name = _("snapshot")
        verbose_name_plural = _("snapshots")
