# Generated by Django 5.1.3 on 2026-05-24 13:55

import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ("organizations", "0001_initial"),
        ("tenants", "0001_initial"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name="Queue",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "is_deleted",
                    models.BooleanField(db_index=True, default=False, verbose_name="deleted"),
                ),
                (
                    "deleted_at",
                    models.DateTimeField(blank=True, null=True, verbose_name="deleted at"),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("name", models.CharField(max_length=128, verbose_name="name")),
                ("description", models.TextField(blank=True, verbose_name="description")),
                (
                    "email_address",
                    models.EmailField(
                        blank=True,
                        help_text="Inbound email address stub for future email channel.",
                        max_length=254,
                        verbose_name="email address",
                    ),
                ),
                (
                    "is_default",
                    models.BooleanField(db_index=True, default=False, verbose_name="is default"),
                ),
                (
                    "is_active",
                    models.BooleanField(db_index=True, default=True, verbose_name="is active"),
                ),
                ("sort_order", models.PositiveIntegerField(default=0, verbose_name="sort order")),
                (
                    "created_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="created by",
                    ),
                ),
                (
                    "deleted_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="deleted by",
                    ),
                ),
                (
                    "organization_node",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="+",
                        to="organizations.organizationnode",
                        verbose_name="organization node",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="+",
                        to="tenants.tenant",
                        verbose_name="tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "queue",
                "verbose_name_plural": "queues",
                "ordering": ("sort_order", "name"),
            },
        ),
        migrations.CreateModel(
            name="Category",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "is_deleted",
                    models.BooleanField(db_index=True, default=False, verbose_name="deleted"),
                ),
                (
                    "deleted_at",
                    models.DateTimeField(blank=True, null=True, verbose_name="deleted at"),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("name", models.CharField(max_length=128, verbose_name="name")),
                ("description", models.TextField(blank=True, verbose_name="description")),
                (
                    "is_active",
                    models.BooleanField(db_index=True, default=True, verbose_name="is active"),
                ),
                ("sort_order", models.PositiveIntegerField(default=0, verbose_name="sort order")),
                (
                    "deleted_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="deleted by",
                    ),
                ),
                (
                    "organization_node",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="+",
                        to="organizations.organizationnode",
                        verbose_name="organization node",
                    ),
                ),
                (
                    "parent",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="children",
                        to="helpdesk.category",
                        verbose_name="parent",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="+",
                        to="tenants.tenant",
                        verbose_name="tenant",
                    ),
                ),
                (
                    "queue",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="categories",
                        to="helpdesk.queue",
                        verbose_name="queue",
                    ),
                ),
            ],
            options={
                "verbose_name": "category",
                "verbose_name_plural": "categories",
                "ordering": ("sort_order", "name"),
            },
        ),
        migrations.CreateModel(
            name="SLAPolicy",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("name", models.CharField(max_length=128, verbose_name="name")),
                ("description", models.TextField(blank=True, verbose_name="description")),
                (
                    "first_response_hours",
                    models.PositiveIntegerField(
                        default=8,
                        help_text="Target hours to first public reply.",
                        verbose_name="first response hours",
                    ),
                ),
                (
                    "next_response_hours",
                    models.PositiveIntegerField(
                        default=24,
                        help_text="Target hours between subsequent replies.",
                        verbose_name="next response hours",
                    ),
                ),
                (
                    "resolution_hours",
                    models.PositiveIntegerField(
                        default=72,
                        help_text="Target hours to resolution.",
                        verbose_name="resolution hours",
                    ),
                ),
                (
                    "business_hours_only",
                    models.BooleanField(
                        default=False,
                        help_text="When True, pause timers outside configured business hours.",
                        verbose_name="business hours only",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(db_index=True, default=True, verbose_name="is active"),
                ),
                (
                    "organization_node",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="+",
                        to="organizations.organizationnode",
                        verbose_name="organization node",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="+",
                        to="tenants.tenant",
                        verbose_name="tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "SLA policy",
                "verbose_name_plural": "SLA policies",
                "ordering": ("name",),
            },
        ),
        migrations.AddField(
            model_name="queue",
            name="default_sla_policy",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="queues_using_as_default",
                to="helpdesk.slapolicy",
                verbose_name="default SLA policy",
            ),
        ),
        migrations.CreateModel(
            name="Tag",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                ("name", models.CharField(max_length=64, verbose_name="name")),
                (
                    "color",
                    models.CharField(
                        blank=True,
                        default="#6B7280",
                        help_text="Hex color, e.g. #3B82F6",
                        max_length=7,
                        verbose_name="color",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(db_index=True, default=True, verbose_name="is active"),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="helpdesk_tags",
                        to="tenants.tenant",
                        verbose_name="tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "tag",
                "verbose_name_plural": "tags",
                "ordering": ("name",),
            },
        ),
        migrations.CreateModel(
            name="Ticket",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "is_deleted",
                    models.BooleanField(db_index=True, default=False, verbose_name="deleted"),
                ),
                (
                    "deleted_at",
                    models.DateTimeField(blank=True, null=True, verbose_name="deleted at"),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("subject", models.CharField(max_length=512, verbose_name="subject")),
                (
                    "description",
                    models.TextField(
                        blank=True,
                        help_text="Initial message body from the requester.",
                        verbose_name="description",
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("new", "New"),
                            ("open", "Open"),
                            ("pending", "Pending"),
                            ("on_hold", "On Hold"),
                            ("solved", "Solved"),
                            ("closed", "Closed"),
                        ],
                        db_index=True,
                        default="new",
                        max_length=16,
                        verbose_name="status",
                    ),
                ),
                (
                    "priority",
                    models.CharField(
                        choices=[
                            ("low", "Low"),
                            ("normal", "Normal"),
                            ("high", "High"),
                            ("urgent", "Urgent"),
                            ("critical", "Critical"),
                        ],
                        db_index=True,
                        default="normal",
                        max_length=16,
                        verbose_name="priority",
                    ),
                ),
                (
                    "channel",
                    models.CharField(
                        choices=[
                            ("web", "Web"),
                            ("email", "Email"),
                            ("portal", "Portal"),
                            ("api", "API"),
                            ("phone", "Phone"),
                        ],
                        db_index=True,
                        default="web",
                        max_length=16,
                        verbose_name="channel",
                    ),
                ),
                (
                    "requester_email",
                    models.EmailField(blank=True, max_length=254, verbose_name="requester email"),
                ),
                (
                    "requester_name",
                    models.CharField(blank=True, max_length=256, verbose_name="requester name"),
                ),
                (
                    "assigned_at",
                    models.DateTimeField(blank=True, null=True, verbose_name="assigned at"),
                ),
                (
                    "escalated_at",
                    models.DateTimeField(blank=True, null=True, verbose_name="escalated at"),
                ),
                (
                    "escalation_reason",
                    models.TextField(blank=True, verbose_name="escalation reason"),
                ),
                (
                    "first_response_due_at",
                    models.DateTimeField(
                        blank=True, db_index=True, null=True, verbose_name="first response due at"
                    ),
                ),
                (
                    "resolution_due_at",
                    models.DateTimeField(
                        blank=True, db_index=True, null=True, verbose_name="resolution due at"
                    ),
                ),
                (
                    "first_responded_at",
                    models.DateTimeField(blank=True, null=True, verbose_name="first responded at"),
                ),
                (
                    "resolved_at",
                    models.DateTimeField(blank=True, null=True, verbose_name="resolved at"),
                ),
                (
                    "closed_at",
                    models.DateTimeField(blank=True, null=True, verbose_name="closed at"),
                ),
                (
                    "satisfaction_rating",
                    models.PositiveSmallIntegerField(
                        blank=True,
                        help_text="1–5 star rating from the requester.",
                        null=True,
                        verbose_name="satisfaction rating",
                    ),
                ),
                (
                    "satisfaction_comment",
                    models.TextField(blank=True, verbose_name="satisfaction comment"),
                ),
                (
                    "custom_fields",
                    models.JSONField(blank=True, default=dict, verbose_name="custom fields"),
                ),
                (
                    "assigned_to",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="helpdesk_assigned_tickets",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="assigned to",
                    ),
                ),
                (
                    "category",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="tickets",
                        to="helpdesk.category",
                        verbose_name="category",
                    ),
                ),
                (
                    "created_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="created by",
                    ),
                ),
                (
                    "deleted_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="deleted by",
                    ),
                ),
                (
                    "escalated_to",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="helpdesk_escalated_tickets",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="escalated to",
                    ),
                ),
                (
                    "organization_node",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="+",
                        to="organizations.organizationnode",
                        verbose_name="organization node",
                    ),
                ),
                (
                    "queue",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="tickets",
                        to="helpdesk.queue",
                        verbose_name="queue",
                    ),
                ),
                (
                    "requester",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="helpdesk_tickets_as_requester",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="requester",
                    ),
                ),
                (
                    "sla_policy",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="tickets",
                        to="helpdesk.slapolicy",
                        verbose_name="SLA policy",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="+",
                        to="tenants.tenant",
                        verbose_name="tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "ticket",
                "verbose_name_plural": "tickets",
                "ordering": ("-created_at",),
            },
        ),
        migrations.CreateModel(
            name="SLATimer",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "breach_type",
                    models.CharField(
                        choices=[
                            ("first_response", "First Response"),
                            ("resolution", "Resolution"),
                        ],
                        db_index=True,
                        max_length=32,
                        verbose_name="breach type",
                    ),
                ),
                ("started_at", models.DateTimeField(auto_now_add=True, verbose_name="started at")),
                ("due_at", models.DateTimeField(db_index=True, verbose_name="due at")),
                (
                    "is_paused",
                    models.BooleanField(db_index=True, default=False, verbose_name="is paused"),
                ),
                (
                    "paused_at",
                    models.DateTimeField(blank=True, null=True, verbose_name="paused at"),
                ),
                (
                    "paused_seconds",
                    models.PositiveBigIntegerField(
                        default=0,
                        help_text="Cumulative seconds spent paused; subtracted from effective due_at.",
                        verbose_name="paused seconds",
                    ),
                ),
                (
                    "breached_at",
                    models.DateTimeField(blank=True, null=True, verbose_name="breached at"),
                ),
                (
                    "is_resolved",
                    models.BooleanField(db_index=True, default=False, verbose_name="is resolved"),
                ),
                (
                    "resolved_at",
                    models.DateTimeField(blank=True, null=True, verbose_name="resolved at"),
                ),
                (
                    "policy",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="timers",
                        to="helpdesk.slapolicy",
                        verbose_name="policy",
                    ),
                ),
                (
                    "ticket",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="sla_timers",
                        to="helpdesk.ticket",
                        verbose_name="ticket",
                    ),
                ),
            ],
            options={
                "verbose_name": "SLA timer",
                "verbose_name_plural": "SLA timers",
            },
        ),
        migrations.CreateModel(
            name="TicketReply",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "is_deleted",
                    models.BooleanField(db_index=True, default=False, verbose_name="deleted"),
                ),
                (
                    "deleted_at",
                    models.DateTimeField(blank=True, null=True, verbose_name="deleted at"),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                (
                    "author_email",
                    models.EmailField(blank=True, max_length=254, verbose_name="author email"),
                ),
                (
                    "author_name",
                    models.CharField(blank=True, max_length=256, verbose_name="author name"),
                ),
                ("body", models.TextField(verbose_name="body")),
                (
                    "html_body",
                    models.TextField(
                        blank=True,
                        help_text="Sanitized HTML version; generated from ``body`` when blank.",
                        verbose_name="HTML body",
                    ),
                ),
                (
                    "is_internal",
                    models.BooleanField(
                        db_index=True,
                        default=False,
                        help_text="True = internal note visible to agents only.",
                        verbose_name="is internal",
                    ),
                ),
                (
                    "channel",
                    models.CharField(
                        choices=[
                            ("web", "Web"),
                            ("email", "Email"),
                            ("portal", "Portal"),
                            ("api", "API"),
                        ],
                        default="web",
                        max_length=16,
                        verbose_name="channel",
                    ),
                ),
                (
                    "author",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="helpdesk_replies",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="author",
                    ),
                ),
                (
                    "deleted_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="deleted by",
                    ),
                ),
                (
                    "ticket",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="replies",
                        to="helpdesk.ticket",
                        verbose_name="ticket",
                    ),
                ),
            ],
            options={
                "verbose_name": "ticket reply",
                "verbose_name_plural": "ticket replies",
                "ordering": ("created_at",),
            },
        ),
        migrations.CreateModel(
            name="TicketTag",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "added_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "tag",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="ticket_tags",
                        to="helpdesk.tag",
                    ),
                ),
                (
                    "ticket",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="ticket_tags",
                        to="helpdesk.ticket",
                    ),
                ),
            ],
            options={
                "verbose_name": "ticket tag",
                "verbose_name_plural": "ticket tags",
            },
        ),
        migrations.AddField(
            model_name="ticket",
            name="tags",
            field=models.ManyToManyField(
                blank=True,
                related_name="tickets",
                through="helpdesk.TicketTag",
                to="helpdesk.tag",
                verbose_name="tags",
            ),
        ),
        migrations.CreateModel(
            name="Automation",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, db_index=True, verbose_name="created at"
                    ),
                ),
                ("updated_at", models.DateTimeField(auto_now=True, verbose_name="updated at")),
                (
                    "public_id",
                    models.UUIDField(
                        db_index=True,
                        default=uuid.uuid4,
                        editable=False,
                        unique=True,
                        verbose_name="public id",
                    ),
                ),
                ("name", models.CharField(max_length=128, verbose_name="name")),
                ("description", models.TextField(blank=True, verbose_name="description")),
                (
                    "trigger",
                    models.CharField(
                        choices=[
                            ("ticket_created", "Ticket Created"),
                            ("ticket_updated", "Ticket Updated"),
                            ("ticket_status_changed", "Status Changed"),
                            ("reply_added", "Reply Added"),
                            ("time_elapsed", "Time Elapsed"),
                        ],
                        db_index=True,
                        default="ticket_created",
                        max_length=32,
                        verbose_name="trigger",
                    ),
                ),
                (
                    "conditions",
                    models.JSONField(
                        blank=True,
                        default=list,
                        help_text="List of condition objects evaluated with implicit AND logic.",
                        verbose_name="conditions",
                    ),
                ),
                (
                    "actions",
                    models.JSONField(
                        blank=True,
                        default=list,
                        help_text="Ordered list of action objects to execute when conditions pass.",
                        verbose_name="actions",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(db_index=True, default=True, verbose_name="is active"),
                ),
                (
                    "sort_order",
                    models.PositiveIntegerField(
                        default=0, help_text="Lower values run first.", verbose_name="sort order"
                    ),
                ),
                ("run_count", models.PositiveBigIntegerField(default=0, verbose_name="run count")),
                (
                    "last_run_at",
                    models.DateTimeField(blank=True, null=True, verbose_name="last run at"),
                ),
                (
                    "organization_node",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="+",
                        to="organizations.organizationnode",
                        verbose_name="organization node",
                    ),
                ),
                (
                    "tenant",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="+",
                        to="tenants.tenant",
                        verbose_name="tenant",
                    ),
                ),
            ],
            options={
                "verbose_name": "automation",
                "verbose_name_plural": "automations",
                "ordering": ("sort_order", "name"),
                "indexes": [
                    models.Index(
                        fields=["tenant", "trigger", "is_active"],
                        name="helpdesk_au_tenant__6ee399_idx",
                    )
                ],
            },
        ),
        migrations.AddIndex(
            model_name="category",
            index=models.Index(
                fields=["tenant", "queue", "is_active"], name="helpdesk_ca_tenant__4ab1d2_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="slapolicy",
            index=models.Index(
                fields=["tenant", "is_active"], name="helpdesk_sl_tenant__808406_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="queue",
            index=models.Index(
                fields=["tenant", "is_active", "sort_order"], name="helpdesk_qu_tenant__1899d7_idx"
            ),
        ),
        migrations.AddConstraint(
            model_name="tag",
            constraint=models.UniqueConstraint(
                fields=("tenant", "name"), name="helpdesk_tag_unique_per_tenant"
            ),
        ),
        migrations.AddIndex(
            model_name="slatimer",
            index=models.Index(
                fields=["due_at", "is_paused", "is_resolved"], name="helpdesk_sl_due_at_7c77dd_idx"
            ),
        ),
        migrations.AddConstraint(
            model_name="slatimer",
            constraint=models.UniqueConstraint(
                fields=("ticket", "breach_type"), name="helpdesk_sla_timer_unique"
            ),
        ),
        migrations.AddIndex(
            model_name="ticketreply",
            index=models.Index(
                fields=["ticket", "is_internal", "created_at"],
                name="helpdesk_ti_ticket__6f58b3_idx",
            ),
        ),
        migrations.AddConstraint(
            model_name="tickettag",
            constraint=models.UniqueConstraint(
                fields=("ticket", "tag"), name="helpdesk_ticket_tag_unique"
            ),
        ),
        migrations.AddIndex(
            model_name="ticket",
            index=models.Index(
                fields=["tenant", "status", "-created_at"], name="helpdesk_ti_tenant__a6544e_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="ticket",
            index=models.Index(
                fields=["tenant", "queue", "status"], name="helpdesk_ti_tenant__8b7729_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="ticket",
            index=models.Index(
                fields=["tenant", "assigned_to", "status"], name="helpdesk_ti_tenant__633e73_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="ticket",
            index=models.Index(
                fields=["tenant", "priority", "status"], name="helpdesk_ti_tenant__da3b4f_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="ticket",
            index=models.Index(
                fields=["tenant", "first_response_due_at"], name="helpdesk_ti_tenant__74801e_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="ticket",
            index=models.Index(
                fields=["tenant", "resolution_due_at"], name="helpdesk_ti_tenant__ccbcdc_idx"
            ),
        ),
    ]
