package action

import (
	"fmt"

	"github.com/tidbcloud/cluster-service-ng/domain/workflow"
	"github.com/tidbcloud/cluster-service-ng/pkg/clusterconfig"
	"github.com/tidbcloud/cluster-service-ng/pkg/runtime/actions"
	"github.com/tidbcloud/cluster-service-ng/pkg/utils"
	"github.com/tidbcloud/tiinf/monitor/tilog"
	"go.uber.org/zap"
)

type DeleteTiDBGroupConfigAction struct {
	clusterConfigClient clusterconfig.Client
}

const DeleteTiDBGroupConfigName = "delete-tidb-group-config"

func NewDeleteTiDBGroupConfigAction(clusterConfigClient clusterconfig.Client) actions.Action {
	return &DeleteTiDBGroupConfigAction{
		clusterConfigClient: clusterConfigClient,
	}
}

func (a *DeleteTiDBGroupConfigAction) Name() string {
	return DeleteTiDBGroupConfigName
}

func (a *DeleteTiDBGroupConfigAction) Invoke(args actions.ActionArgs) error {
	ctx := utils.GenerateContext(args)
	tilog.Info(ctx, "delete tidb group config action invoked")

	tidbClusterId, err := args.GetString(workflow.TiDBClusterIdKey)
	if err != nil {
		return fmt.Errorf("failed to get tidb cluster id: %w", err)
	}

	tidbGroupId, err := args.GetString(workflow.TiDBGroupIdKey)
	if err != nil {
		return fmt.Errorf("failed to get tidb group id: %w", err)
	}

	err = a.clusterConfigClient.DeleteTiDBGroupConfig(ctx, tidbClusterId, tidbGroupId)
	if err != nil {
		tilog.Error(ctx, "failed to delete tidb group config",
			zap.String("tidbClusterId", tidbClusterId),
			zap.String("tidbGroupId", tidbGroupId),
			zap.Error(err),
		)
		return fmt.Errorf("failed to delete tidb group config: %w", err)
	}

	return nil
}
