"""Smoke test for migration 0003: model classes import, schema shape correct."""

from backend.app.models import (
    Base,
    ImageRecord,
    MLSettings,
    TagAlias,
    TagAllowlist,
    TagReferenceEmbedding,
    TagSuggestionRejection,
)


def test_new_tables_registered():
    expected = {
        "tag_allowlist",
        "tag_suggestion_rejection",
        "tag_alias",
        "tag_reference_embedding",
        "ml_settings",
    }
    assert expected.issubset(Base.metadata.tables.keys())


def test_image_record_columns_renamed():
    cols = {c.name for c in ImageRecord.__table__.columns}
    # tagger_predictions (the renamed wd14_predictions) was later dropped in
    # migration 0046 — predictions live in image_prediction now (#768).
    assert "tagger_model_version" in cols
    assert "tagger_predictions" not in cols
    assert "wd14_predictions" not in cols
    assert "wd14_model_version" not in cols


def test_tag_alias_composite_pk():
    pk_cols = {c.name for c in TagAlias.__table__.primary_key.columns}
    assert pk_cols == {"alias_string", "alias_category"}


def test_ml_settings_singleton_constraint():
    names = {c.name for c in MLSettings.__table__.constraints}
    assert "ck_ml_settings_singleton" in names


def test_tag_reference_embedding_has_vector():
    cols = {c.name for c in TagReferenceEmbedding.__table__.columns}
    assert "embedding" in cols
    assert "reference_count" in cols


def test_tag_allowlist_confidence_check():
    names = {c.name for c in TagAllowlist.__table__.constraints}
    assert "ck_tag_allowlist_confidence_range" in names


def test_tag_suggestion_rejection_pk():
    pk_cols = {c.name for c in TagSuggestionRejection.__table__.primary_key.columns}
    assert pk_cols == {"image_record_id", "tag_id"}
