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

import apps.alumni.profiles.models


class Migration(migrations.Migration):

    dependencies = [
        ("alumni_profiles", "0003_alumni_profile_search_vector"),
        ("mel_feedback", "0001_initial"),
        # Ensure the pgvector extension is created before we try to use vector(...).
        ("repository_analytics", "0001_create_vector_extension"),
    ]

    operations = [
        migrations.CreateModel(
            name="LinkedInSyncLog",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                (
                    "linkedin_subject",
                    models.CharField(
                        blank=True,
                        help_text="LinkedIn 'sub' identifier returned by /v2/userinfo.",
                        max_length=64,
                    ),
                ),
                ("last_attempt_at", models.DateTimeField(blank=True, null=True)),
                ("last_success_at", models.DateTimeField(blank=True, null=True)),
                ("last_error", models.TextField(blank=True)),
                (
                    "fields_filled",
                    models.JSONField(
                        blank=True,
                        default=list,
                        help_text="Profile fields the most recent sync wrote into.",
                    ),
                ),
                (
                    "profile",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="linkedin_sync_log",
                        to="alumni_profiles.alumniprofile",
                    ),
                ),
            ],
        ),
        migrations.CreateModel(
            name="EmployerFeedbackInvitation",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("employer_email", models.EmailField(max_length=254)),
                ("employer_name", models.CharField(blank=True, max_length=255)),
                (
                    "token",
                    models.CharField(
                        db_index=True,
                        default=apps.alumni.profiles.models._employer_feedback_token,
                        max_length=64,
                        unique=True,
                    ),
                ),
                ("invited_at", models.DateTimeField(auto_now_add=True)),
                ("responded_at", models.DateTimeField(blank=True, null=True)),
                (
                    "profile",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="employer_feedback_invitations",
                        to="alumni_profiles.alumniprofile",
                    ),
                ),
                (
                    "study",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="alumni_employer_invitations",
                        to="mel_feedback.tracerstudy",
                    ),
                ),
            ],
            options={
                "ordering": ["-invited_at"],
                "indexes": [
                    models.Index(
                        fields=["profile", "responded_at"],
                        name="alumni_prof_employerfb_idx",
                    )
                ],
            },
        ),
        migrations.CreateModel(
            name="AlumniProfileEmbedding",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
                    ),
                ),
                ("embedding", pgvector.django.vector.VectorField(dimensions=1536)),
                ("source_text_hash", models.CharField(blank=True, db_index=True, max_length=64)),
                ("last_synced_at", models.DateTimeField(auto_now=True)),
                (
                    "profile",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="embedding_row",
                        to="alumni_profiles.alumniprofile",
                    ),
                ),
            ],
            options={
                "indexes": [
                    pgvector.django.indexes.HnswIndex(
                        ef_construction=64,
                        fields=["embedding"],
                        m=16,
                        name="alumni_profile_embed_hnsw",
                        opclasses=["vector_cosine_ops"],
                    ),
                ],
            },
        ),
    ]
