package infra

import (
	"context"

	"github.com/tidbcloud/tiinf/monitor/tilog"

	"go.uber.org/zap"
)

func UpdateRole(ctx context.Context, params *OperateRoleParams) error {
	if err := checkOperateRoleParams(params); err != nil {
		tilog.Warn(ctx, "InfraProxy UpdateRole checkOperateRoleParams error", zap.Any("err", err))
		return err
	}

	tilog.Info(ctx, "InfraProxy UpdateRole param", zap.Any("clusterId", params.Cluster.Id), zap.Any("operator", params.Operator.Username),
		zap.Any("roleName", params.RoleName), zap.Any("grants", params.Grants), zap.Any("revocation", params.Revocation))

	proxy, err := GetClusterProxy(ctx, params.Cluster)
	if err != nil {
		tilog.Warn(ctx, "InfraProxy UpdateRole GetClusterProxy error", zap.Any("clusterId", params.Cluster.Id))
		return err
	}

	sqls := parseGrantAndRevokeSql(params.Grants, params.Revocation)

	err = proxy.ExecuteMultiSQLV2(ctx, params.Operator, sqls)
	tilog.Info(ctx, "InfraProxy UpdateRole ExecuteMultiSQLV2 result", zap.Any("clusterId", params.Cluster.Id), zap.Any("operator", params.Operator.Username), zap.Any("sqls", sqls), zap.Any("err", err))

	return err
}
