"""
Initial migration for the faces app.
Creates the pgvector extension, FaceRecord table, and IVFFlat cosine index.
"""

import django.db.models.deletion
import pgvector.django
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = []

    operations = [
        # 1. Enable the pgvector extension
        migrations.RunSQL(
            sql="CREATE EXTENSION IF NOT EXISTS vector;",
            reverse_sql="DROP EXTENSION IF EXISTS vector;",
        ),
        # 2. Create the faces_facerecord table
        migrations.CreateModel(
            name="FaceRecord",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("name", models.CharField(max_length=255)),
                ("photo", models.ImageField(upload_to="faces/")),
                (
                    "embedding",
                    pgvector.django.VectorField(dimensions=512),
                ),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("metadata", models.JSONField(blank=True, default=dict)),
            ],
            options={
                "db_table": "faces_facerecord",
                "ordering": ["-created_at"],
            },
        ),
        # 3. Create IVFFlat index for fast cosine similarity ANN search
        migrations.RunSQL(
            sql=(
                "CREATE INDEX IF NOT EXISTS faces_facerecord_embedding_idx "
                "ON faces_facerecord USING ivfflat (embedding vector_cosine_ops) "
                "WITH (lists = 100);"
            ),
            reverse_sql="DROP INDEX IF EXISTS faces_facerecord_embedding_idx;",
        ),
    ]
