package migrate

import (
	"fmt"

	k8smod "github.com/tidbcloud/devops/models/k8supgrade"

	"gorm.io/gorm"
)

// migration for:
// 1) add selector_type to `k8s_upgrade_tasks`
// 2) backfill selector_type from deprecated columns: only_internal, non_prod_clusters, by_region.
var _ = AddMigrateRecord(
	"202604131915",
	func(db *gorm.DB) error {
		if err := db.AutoMigrate(&k8smod.Task{}); err != nil {
			return err
		}

		// Backfill selector_type for existing data, only when selector_type is NULL/empty.
		if err := db.Exec(`
UPDATE k8s_upgrade_tasks
SET selector_type = 'internal'
WHERE (selector_type IS NULL OR selector_type = '')
  AND only_internal = TRUE
`).Error; err != nil {
			return fmt.Errorf("backfill selector_type=internal failed: %w", err)
		}

		if err := db.Exec(`
UPDATE k8s_upgrade_tasks
SET selector_type = 'non_prod'
WHERE (selector_type IS NULL OR selector_type = '')
  AND non_prod_clusters = TRUE
`).Error; err != nil {
			return fmt.Errorf("backfill selector_type=non_prod failed: %w", err)
		}

		if err := db.Exec(`
UPDATE k8s_upgrade_tasks
SET selector_type = 'by_region'
WHERE (selector_type IS NULL OR selector_type = '')
  AND by_region = TRUE
`).Error; err != nil {
			return fmt.Errorf("backfill selector_type=by_region failed: %w", err)
		}

		return nil
	},
)
