package migrate

import (
	"context"

	relent "github.com/tidbcloud/devops/entity/release"
	"github.com/tidbcloud/devops/pkg/service/release/repo"

	"github.com/tidbcloud/pkgv2/db"
	"gorm.io/gorm"
)

// migration for release service to migrate description field for manual deployments.
var _ = AddMigrateRecord(
	"202411111400",
	func(raw *gorm.DB) error {
		dbp := db.NewProvider(raw)
		r := repo.NewRepo(dbp)

		return dbp.Transaction(context.Background(), func(ctx context.Context) error {
			page := 1
			perPage := 100
			for {
				changes, err := r.ListChanges(ctx, true, repo.ChangeOpts.WithPager(page, perPage, false))
				if err != nil {
					return err
				}

				if len(changes) == 0 {
					return nil
				}
				page++

				for _, change := range changes {
					changed := false
					for _, deployment := range change.Deployments {
						if deployment.Method == relent.ChangeDeployMethodManual &&
							deployment.Info.Manual != nil {
							changed = true
							deployment.Info.Description = deployment.Info.Manual.Description
						}
					}

					if changed {
						err = r.PatchChange(ctx, change)
						if err != nil {
							return err
						}
					}
				}

			}
		})

	},
)
