package migrate

import (
	wsent "github.com/tidbcloud/aisupport/packages/sdk-go/contracts/entity/ticket-manager/workspace"
	modbase "github.com/tidbcloud/aisupport/services/ticket-manager/models/base"
	wsmod "github.com/tidbcloud/aisupport/services/ticket-manager/models/workspace"

	"gorm.io/gorm"
	"gorm.io/gorm/clause"
)

type legacyWorkspaceOwner struct {
	ID    modbase.ID `gorm:"column:id"`
	Owner string     `gorm:"column:owner"`
}

var _ = addRecord("202605281200", func(db *gorm.DB) error {
	if !db.Migrator().HasColumn("workspace_workspaces", "owner") {
		return nil
	}

	var owners []legacyWorkspaceOwner
	if err := db.Table("workspace_workspaces").
		Select("id, owner").
		Where("owner <> ''").
		Find(&owners).Error; err != nil {
		return err
	}

	members := make([]*wsmod.WorkspaceMember, 0, len(owners))
	for _, owner := range owners {
		members = append(members, &wsmod.WorkspaceMember{
			WorkspaceID: owner.ID,
			Role:        string(wsent.WorkspaceMemberRoleOwner),
			Email:       owner.Owner,
		})
	}
	if len(members) > 0 {
		if err := db.Clauses(clause.OnConflict{DoNothing: true}).Create(&members).Error; err != nil {
			return err
		}
	}

	return db.Migrator().DropColumn("workspace_workspaces", "owner")
})
