# Generated by Django 6.0.3 on 2026-04-26 12:51

import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ("record", "0009_exportsubmission_export_date_and_more"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.AddField(
            model_name="unitofmeasurement",
            name="dimension",
            field=models.CharField(
                blank=True,
                choices=[
                    ("weight", "Weight"),
                    ("volume", "Volume"),
                    ("count", "Count"),
                    ("length", "Length"),
                    ("area", "Area"),
                    ("other", "Other"),
                ],
                default="",
                help_text="Logical unit group used for conversion validation.",
                max_length=20,
                verbose_name="Dimension",
            ),
        ),
        migrations.CreateModel(
            name="MetadataDeletionRequest",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "target_type",
                    models.CharField(
                        choices=[
                            ("commodity_category", "Commodity Category"),
                            ("commodity_type", "Commodity Type"),
                            ("collection_category", "Collection Category"),
                            ("collection_type", "Collection Type"),
                        ],
                        max_length=40,
                        verbose_name="Target Type",
                    ),
                ),
                ("target_id", models.UUIDField(verbose_name="Target ID")),
                (
                    "target_name",
                    models.CharField(
                        blank=True,
                        default="",
                        max_length=255,
                        verbose_name="Target Name Snapshot",
                    ),
                ),
                (
                    "reason",
                    models.TextField(blank=True, null=True, verbose_name="Reason"),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("pending", "Pending"),
                            ("approved", "Approved"),
                            ("denied", "Denied"),
                        ],
                        default="pending",
                        max_length=20,
                        verbose_name="Status",
                    ),
                ),
                (
                    "reviewed_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="Reviewed At"
                    ),
                ),
                (
                    "review_note",
                    models.TextField(blank=True, null=True, verbose_name="Review Note"),
                ),
                (
                    "requested_by",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="metadata_delete_requests",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="Requested By",
                    ),
                ),
                (
                    "reviewed_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="metadata_delete_reviews",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="Reviewed By",
                    ),
                ),
            ],
            options={
                "verbose_name": "Master Data Deletion Request",
                "verbose_name_plural": "Category/Type of Collection/Commodity Data Deletion Requests",
                "db_table": "record_metadata_deletion_request",
                "ordering": ["-created_at"],
                "constraints": [
                    models.UniqueConstraint(
                        condition=models.Q(("status", "pending")),
                        fields=("target_type", "target_id"),
                        name="record_metadata_delete_request_unique_pending_target",
                    )
                ],
            },
        ),
        migrations.CreateModel(
            name="UnitConversion",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "factor",
                    models.DecimalField(
                        decimal_places=10, max_digits=20, verbose_name="Factor"
                    ),
                ),
                (
                    "from_unit",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="outgoing_conversions",
                        to="record.unitofmeasurement",
                        verbose_name="From Unit",
                    ),
                ),
                (
                    "to_unit",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="incoming_conversions",
                        to="record.unitofmeasurement",
                        verbose_name="To Unit",
                    ),
                ),
            ],
            options={
                "verbose_name": "Unit Conversion",
                "verbose_name_plural": "Unit Conversions",
                "db_table": "record_unit_conversion",
                "ordering": ["from_unit__name", "to_unit__name"],
                "constraints": [
                    models.UniqueConstraint(
                        fields=("from_unit", "to_unit"),
                        name="record_unit_conversion_unique_pair",
                    ),
                    models.CheckConstraint(
                        condition=models.Q(("factor__gt", 0)),
                        name="record_unit_conversion_factor_gt_0",
                    ),
                    models.CheckConstraint(
                        condition=models.Q(
                            ("from_unit", models.F("to_unit")), _negated=True
                        ),
                        name="record_unit_conversion_from_not_to",
                    ),
                ],
            },
        ),
    ]
