package migration

import (
	"gorm.io/gorm"

	"github.com/tidbcloud/tidb-management-service/nextgen-global-service/infra/repoimpl/schema"
)

// Migration 202605090001:
// 1. Add service_plan to resource_pool_strategies.
// 2. Backfill service_plan from default_resource_pool_id, then fallback to Premium.
// 3. Rebuild active unique index from (org, provider, region) to (org, provider, region, service_plan).
var _ = AddDBMigrateRecord(
	"202605090001",
	func(db *gorm.DB) error {
		return db.Transaction(func(tx *gorm.DB) error {
			if err := tx.AutoMigrate(&schema.ResourcePoolStrategy{}); err != nil {
				return err
			}

			if err := tx.Exec("" +
				"UPDATE resource_pool_strategies s " +
				"JOIN resource_pools p ON p.id = s.default_resource_pool_id " +
				"SET s.service_plan = p.service_plan " +
				"WHERE (s.service_plan = '' OR s.service_plan IS NULL) " +
				"AND p.service_plan <> ''").Error; err != nil {
				return err
			}

			if err := tx.Exec("ALTER TABLE resource_pool_strategies DROP INDEX UQ_ACTIVE_STRATEGY").Error; err != nil {
				return err
			}

			if err := tx.Exec(`
ALTER TABLE resource_pool_strategies
ADD CONSTRAINT UQ_ACTIVE_STRATEGY UNIQUE (
	organization_id,
	provider_id,
	region_id,
	service_plan,
	unique_check
);`).Error; err != nil {
				return err
			}

			return nil
		})
	},
)
