package migrate

import (
	"time"

	engmodel "github.com/tidbcloud/aisupport/services/ticket-manager/models/engineer"

	"gorm.io/gorm"
)

var _ = addRecord("202607101500", migrateEngineerDispatchState)

const legacyLastAssignedAtIndex = "idx_engineer_engineers_last_assigned_at"

type engineerWithLastAssignedAt struct {
	LastAssignedAt *time.Time `gorm:"column:last_assigned_at;type:datetime(3)"`
}

func (engineerWithLastAssignedAt) TableName() string {
	return "engineer_engineers"
}

func migrateEngineerDispatchState(db *gorm.DB) error {
	legacy := &engineerWithLastAssignedAt{}
	if db.Migrator().HasColumn(legacy, "last_assigned_at") {
		if db.Migrator().HasIndex(legacy, legacyLastAssignedAtIndex) {
			if err := db.Migrator().DropIndex(legacy, legacyLastAssignedAtIndex); err != nil {
				return err
			}
		}
		if db.Migrator().HasColumn(&engmodel.Engineer{}, "last_dispatched_at") {
			if err := db.Model(legacy).
				Where("last_dispatched_at IS NULL").
				Update("last_dispatched_at", gorm.Expr("last_assigned_at")).Error; err != nil {
				return err
			}
			if err := db.Migrator().DropColumn(legacy, "last_assigned_at"); err != nil {
				return err
			}
		} else if err := db.Migrator().RenameColumn(legacy, "last_assigned_at", "last_dispatched_at"); err != nil {
			return err
		}
	}
	return db.AutoMigrate(&engmodel.Engineer{})
}
