package migrate

import (
	"context"
	"fmt"

	appent "github.com/tidbcloud/devops/entity/application"
	appmod "github.com/tidbcloud/devops/models/application"
	"github.com/tidbcloud/devops/pkg/service/application/repo"

	"github.com/tidbcloud/pkgv2/db"
	"gopkg.in/yaml.v2"
	"gorm.io/gorm"
)

// migration for application service.
var _ = AddMigrateRecord(
	"202411071400",
	func(raw *gorm.DB) error {
		err := raw.AutoMigrate(&appmod.Application{}, &appmod.ApplicationToOwner{})
		if err != nil {
			return err
		}

		type migrateApp struct {
			Owners []string `yaml:"owners"`
		}

		migrateApps := map[string]migrateApp{}
		err = yaml.Unmarshal([]byte(migrateAppData), &migrateApps)
		if err != nil {
			return err
		}

		dbp := db.NewProvider(raw)
		repo := repo.NewApplicationRepo(dbp)
		return dbp.Transaction(context.Background(), func(ctx context.Context) error {
			for name, mapp := range migrateApps {
				_, err := repo.CreateApplication(ctx, &appent.Application{
					ID:          0,
					Name:        name,
					Description: fmt.Sprintf("%s service", name),
					Owners:      mapp.Owners,
				})
				if err != nil {
					return err
				}
			}
			return nil
		})
	},
)

var migrateAppData = `
account:
  owners:
  - letian.wang@pingcap.com
  - bing.wang@pingcap.com
  cdType: pulumi
  windowStartAt:
    weekday: 2
    hour: 18
    minute: 30
  windowEndAt:
    weekday: 2
    hour: 20
    minute: 30
  slis:
  - type: Availability
    name: "HTTP API Availability"
    objectives:
    - name: "Availability > p999"
      promQL: ""
      op: gt
      value: 0.999
aipower:
  owners:
  - nizheming@pingcap.com
  - huangjiajun@pingcap.com
  cdType: pulumi
billing:
  owners:
  - nizheming@pingcap.com
  cdType: pulumi
clinic:
  owners:
  - charles.m@pingcap.com
  - wangkang@pingcap.com
  cdType: pulumi
core-svc:
  owners:
  - liuzhi@pingcap.com
  - fei.chen@pingcap.com
  - qifangfang@pingcap.com
  - liucong@pingcap.com
  - xianming.dou@pingcap.com
  cdType: argo
devops:
  owners:
  - sihao.yu@pingcap.com
  - hu.guo@pingcap.com
  - charles.m@pingcap.com
  cdType: pulumi
dataapps:
  owners:
  - bing.wang@pingcap.com
  - hongmeng.lv@pingcap.com
  cdType: pulumi
dataflow:
  owners:
  - yuanrui.cai@pingcap.com
  - le.wang@pingcap.com
  - bear.c@pingcap.com
  - breezewish@pingcap.com
  - weiwan@pingcap.com
  - fangdong.jia@pingcap.com
  - bing.wang@pingcap.com
  cdType: argo
dataservices:
  owners:
  - bing.wang@pingcap.com
  - hongmeng.lv@pingcap.com
  cdType: pulumi
ecosystem-service:
  owners:
  - zhangxiang02@pingcap.com
  cdType: pulumi
serverless-service:
  owners:
  - yuqing.bai@pingcap.com
  - yansu.yuan@pingcap.com
  cdType: argo
infra:
  owners:
  - xukai@pingcap.com
  - shawn@pingcap.com
  cdType: argo
o11y:
  owners:
  - duanbing@pingcap.com
  cdType: argo
dbaas-fe:
  owners: 
  - shengbo.ma@pingcap.com
  cdType: pulumi
tidb-management-service:
  owners:
  - qifangfang@pingcap.com
  - liucong@pingcap.com
  - xianming.dou@pingcap.com
  cdType: pulumi
serverless-credits-campaign:
  owners:
  - liangzhiyuan@pingcap.com
  cdType: argo
`
