package database

import (
	"github.com/tidbcloud/AgentTeam/internal/store/content/migration"
	"github.com/tidbcloud/AgentTeam/internal/store/resource/memory"
	"github.com/tidbcloud/AgentTeam/internal/store/resource/roles"
	"github.com/tidbcloud/AgentTeam/internal/store/resource/skills"
)

// resourceContentSchemaTables are the resource-domain projections that bind
// Role and Skill versions to immutable Content Store versions. Migrate owns
// these tables through GORM AutoMigrate; core TiDB bootstrap does not.
var resourceContentSchemaTables = []tableModel{
	{"skills", &skills.Skill{}},
	{"memories", &memory.Memory{}},
	{"memory_content_checkpoints", &memory.MemoryContentCheckpoint{}},
	{"skill_versions", &skills.SkillVersion{}},
	{"role_versions", &roles.RoleVersion{}},
	{"role_package_manifest_items", &roles.RolePackageManifestItem{}},
	{"content_ags_migration_jobs", &migration.Job{}},
}

var resourceContentRequiredColumns = map[string][]string{
	"skills":   {"content_id", "active_content_version_id"},
	"memories": {"content_id", "active_content_version_id", "content_generation", "content_history_sequence", "active_replica_id", "acknowledged_sequence"},
	"memory_content_checkpoints": {
		"id", "workspace_id", "memory_id", "content_id", "content_version_id", "parent_content_version_id", "target_content_version_id",
		"operation_id", "operation_kind", "replica_id", "covered_from_sequence", "covered_through_sequence",
		"generation", "history_sequence", "root_digest", "file_count", "size_bytes", "source_author_name", "source_author_email", "source_authored_at", "source_message", "created_by", "created_at",
	},
	"skill_versions": {
		"id", "workspace_id", "skill_id", "content_id", "content_version_id",
		"root_digest", "file_count", "size_bytes", "skill_count", "created_by", "created_at",
	},
	"role_versions":               {"content_id", "content_version_id"},
	"role_package_manifest_items": {"content_id", "content_version_id", "content_path"},
	"content_ags_migration_jobs": {
		"id", "workspace_id", "domain", "binding_key", "source_cursor", "ags_repository_id", "ags_commit_sha",
		"expected_head_version_id", "content_id", "content_version_id", "root_digest", "file_count", "size_bytes",
		"cursor", "attempts", "lease_owner", "lease_until", "last_error", "created_at", "updated_at", "completed_at",
	},
}

var resourceContentRequiredIndexes = map[string][]string{
	"skills":                      {"idx_skills_exact_content"},
	"memories":                    {"idx_memories_exact_content"},
	"memory_content_checkpoints":  {"idx_memory_content_history", "uk_memory_content_history_sequence", "uk_memory_content_version", "uk_memory_content_operation", "idx_memory_content_lineage"},
	"skill_versions":              {"idx_skill_versions_history", "uk_skill_content_version", "idx_skill_versions_content"},
	"role_versions":               {"idx_role_versions_exact_content", "idx_role_versions_history"},
	"role_package_manifest_items": {"idx_role_pkg_manifest_scope_content"},
	"content_ags_migration_jobs":  {"uk_content_migration_job_target"},
}

var resourceContentRequiredIndexColumns = map[string]map[string][]string{
	"skills": {
		"idx_skills_exact_content": {"workspace_id", "id", "content_id", "active_content_version_id"},
	},
	"memories": {
		"idx_memories_exact_content": {"id", "content_id", "active_content_version_id", "content_generation"},
	},
	"memory_content_checkpoints": {
		"idx_memory_content_history":         {"workspace_id", "memory_id", "history_sequence", "id"},
		"uk_memory_content_history_sequence": {"workspace_id", "memory_id", "history_sequence"},
		"uk_memory_content_version":          {"workspace_id", "memory_id", "content_id", "content_version_id"},
		"uk_memory_content_operation":        {"workspace_id", "memory_id", "operation_id"},
		"idx_memory_content_lineage":         {"workspace_id", "content_id", "content_version_id"},
	},
	"skill_versions": {
		"idx_skill_versions_history": {"workspace_id", "skill_id", "created_at", "id"},
		"uk_skill_content_version":   {"workspace_id", "skill_id", "content_id", "content_version_id"},
		"idx_skill_versions_content": {"workspace_id", "content_id", "content_version_id"},
	},
	"role_versions": {
		"idx_role_versions_exact_content": {"workspace_id", "role_id", "content_id", "content_version_id"},
		"idx_role_versions_history":       {"workspace_id", "role_id", "content_id", "created_at", "id"},
	},
	"role_package_manifest_items": {
		"idx_role_pkg_manifest_scope_content": {"workspace_id", "role_id", "role_version_id", "content_id", "content_version_id"},
	},
	"content_ags_migration_jobs": {
		"uk_content_migration_job_target": {"workspace_id", "domain", "binding_key", "source_cursor"},
	},
}
