package database

import (
	"testing"

	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/AgentTeam/internal/store/resource/memory"
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

func TestMigrateCreatesMemoryExactContentProjectionSchema(t *testing.T) {
	db, err := gorm.Open(sqlite.Open("file:"+t.Name()+"?mode=memory&cache=shared"), &gorm.Config{})
	require.NoError(t, err)
	sqlDB, err := db.DB()
	require.NoError(t, err)
	t.Cleanup(func() { require.NoError(t, sqlDB.Close()) })
	require.NoError(t, Migrate(db))
	require.NoError(t, VerifySchema(db))

	migrator := db.Migrator()
	for _, column := range []string{"content_id", "active_content_version_id", "content_generation", "content_history_sequence", "active_replica_id", "acknowledged_sequence"} {
		require.True(t, migrator.HasColumn(&memory.Memory{}, column))
	}
	require.True(t, migrator.HasTable(&memory.MemoryContentCheckpoint{}))
	requireIndexColumns(t, db, "memories", "idx_memories_exact_content", "id", "content_id", "active_content_version_id", "content_generation")
	requireIndexColumns(t, db, "memory_content_checkpoints", "idx_memory_content_history", "workspace_id", "memory_id", "history_sequence", "id")
	requireIndexColumns(t, db, "memory_content_checkpoints", "uk_memory_content_history_sequence", "workspace_id", "memory_id", "history_sequence")
	requireIndexColumns(t, db, "memory_content_checkpoints", "uk_memory_content_version", "workspace_id", "memory_id", "content_id", "content_version_id")
	requireIndexColumns(t, db, "memory_content_checkpoints", "uk_memory_content_operation", "workspace_id", "memory_id", "operation_id")
}
