# Generated by Django 5.1.3 on 2026-05-27 11:44

import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ("dms", "0002_phase3_document_core"),
        ("organizations", "0001_initial"),
        ("storage", "0003_phase0c_fileasset_enhancement"),
        ("tenants", "0001_initial"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name="PreviewRecord",
            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",
                    ),
                ),
                (
                    "preview_format",
                    models.CharField(
                        choices=[
                            ("thumbnail_png", "Thumbnail (PNG)"),
                            ("thumbnail_webp", "Thumbnail (WebP)"),
                            ("pdf_render", "PDF Render"),
                            ("html_preview", "HTML Preview"),
                            ("text_extract", "Text Extract"),
                        ],
                        db_index=True,
                        max_length=30,
                        verbose_name="preview format",
                    ),
                ),
                (
                    "page_number",
                    models.PositiveSmallIntegerField(
                        blank=True,
                        help_text="1-based page number for paginated documents.  NULL means the whole document (summary thumbnail, full PDF render, etc.).",
                        null=True,
                        verbose_name="page number",
                    ),
                ),
                (
                    "width",
                    models.PositiveSmallIntegerField(
                        blank=True, null=True, verbose_name="width px"
                    ),
                ),
                (
                    "height",
                    models.PositiveSmallIntegerField(
                        blank=True, null=True, verbose_name="height px"
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("pending", "Pending"),
                            ("processing", "Processing"),
                            ("ready", "Ready"),
                            ("failed", "Failed"),
                            ("unavailable", "Unavailable"),
                        ],
                        db_index=True,
                        default="pending",
                        max_length=20,
                        verbose_name="status",
                    ),
                ),
                (
                    "failure_reason",
                    models.TextField(
                        blank=True,
                        default="",
                        help_text="Human-readable error message when status=FAILED.",
                        verbose_name="failure reason",
                    ),
                ),
                (
                    "provider",
                    models.CharField(
                        blank=True,
                        default="",
                        help_text="Converter backend identifier, e.g. 'libreoffice_worker'.",
                        max_length=100,
                        verbose_name="provider",
                    ),
                ),
                (
                    "provider_job_id",
                    models.CharField(
                        blank=True,
                        default="",
                        help_text="External job reference for async polling / webhook routing.",
                        max_length=255,
                        verbose_name="provider job id",
                    ),
                ),
                (
                    "file_size_bytes",
                    models.PositiveBigIntegerField(
                        blank=True, null=True, verbose_name="file size (bytes)"
                    ),
                ),
                (
                    "content_type",
                    models.CharField(
                        blank=True, default="", max_length=200, verbose_name="content type"
                    ),
                ),
                (
                    "is_primary",
                    models.BooleanField(
                        default=False,
                        help_text="Marks the canonical thumbnail shown in document listings.  Enforced unique per version in service layer.",
                        verbose_name="primary",
                    ),
                ),
                (
                    "created_by",
                    models.ForeignKey(
                        blank=True,
                        editable=False,
                        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",
                    ),
                ),
                (
                    "document_version",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="previews",
                        to="dms.documentversion",
                        verbose_name="document version",
                    ),
                ),
                (
                    "file_asset",
                    models.ForeignKey(
                        blank=True,
                        help_text="Populated when status=READY.",
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="preview_records",
                        to="storage.filemetadata",
                        verbose_name="result file asset",
                    ),
                ),
                (
                    "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",
                    ),
                ),
                (
                    "updated_by",
                    models.ForeignKey(
                        blank=True,
                        editable=False,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="updated by",
                    ),
                ),
            ],
            options={
                "verbose_name": "preview record",
                "verbose_name_plural": "preview records",
                "ordering": ("preview_format", "page_number"),
                "indexes": [
                    models.Index(
                        fields=["document_version", "status", "is_deleted"],
                        name="dms_preview_documen_becf0b_idx",
                    ),
                    models.Index(
                        fields=["tenant", "status", "is_deleted"],
                        name="dms_preview_tenant__1c6ecf_idx",
                    ),
                    models.Index(fields=["provider_job_id"], name="dms_preview_provide_660175_idx"),
                ],
                "constraints": [
                    models.UniqueConstraint(
                        condition=models.Q(("is_deleted", False), ("is_primary", True)),
                        fields=("document_version",),
                        name="dms_previewrecord_unique_primary_per_version",
                    ),
                    models.UniqueConstraint(
                        condition=models.Q(("is_deleted", False)),
                        fields=("document_version", "preview_format", "page_number"),
                        name="dms_previewrecord_unique_format_page_per_version",
                    ),
                ],
            },
        ),
    ]
