package migrate

import (
	"encoding/json"

	dispatchmodel "github.com/tidbcloud/aisupport/services/ticket-manager/models/dispatch"

	"gorm.io/gorm"
)

var _ = addRecord("202607171300", migrateDispatchRuleWeeklyTimeWindow)

func migrateDispatchRuleWeeklyTimeWindow(db *gorm.DB) error {
	var rules []dispatchmodel.Rule
	if err := db.Select("id", "condition_json").Find(&rules).Error; err != nil {
		return err
	}
	for _, rule := range rules {
		var condition map[string]any
		if err := json.Unmarshal(rule.ConditionJSON, &condition); err != nil {
			return err
		}
		renameWeeklyTimeWindow(condition)
		conditionJSON, err := json.Marshal(condition)
		if err != nil {
			return err
		}
		if err := db.Table("dispatch_rules").Where("id = ?", rule.ID).Update("condition_json", conditionJSON).Error; err != nil {
			return err
		}
	}
	return nil
}

func renameWeeklyTimeWindow(condition map[string]any) {
	walkCondition(condition, func(condition map[string]any) {
		if condition["operator"] == "business_hours" {
			condition["operator"] = "within_weekly_time_window"
		}
		if window, ok := condition["business_day_value"]; ok {
			condition["weekly_time_window"] = window
			delete(condition, "business_day_value")
		}
	})
}
