package clustereventconsumer

import (
	"context"
	"strings"

	"github.com/tidbcloud/tiinf/monitor/tilog"
	"github.com/tidbcloud/tiinf/transport/tieventbus"
	"go.uber.org/zap"

	tidbmgmtservicev1 "github.com/tidbcloud/tidb-management-service/api/spec/tidb_mgmt_service/v1"
	eventutil "github.com/tidbcloud/tidb-management-service/utilities/clusterevent"
)

func (c *clusterEventConsumerManagerImp) handleRootPasswordRotatedCleanup(ctx context.Context, ev *tieventbus.Event) error {
	eventBody, ok := ev.Data.(*eventutil.ClusterEvent)
	if !ok || eventBody == nil {
		return nil
	}
	if eventBody.EventType != eventutil.EventTypeRootPasswordRotated {
		return nil
	}

	statusMap, err := c.customStatusRepo.ListClusterCustomStatus(
		ctx,
		[]uint64{eventBody.ClusterID},
		[]tidbmgmtservicev1.CustomStatusType{tidbmgmtservicev1.CustomStatusType_CUSTOM_STATUS_TYPE_MODIFYING},
		false,
	)
	if err != nil {
		return err
	}

	for _, status := range statusMap[eventBody.ClusterID] {
		if status == nil || !strings.HasPrefix(status.StatusName, "rotate-root-password-") {
			continue
		}
		if delErr := c.customStatusRepo.DeleteClusterCustomStatus(ctx, status.StatusId); delErr != nil {
			tilog.Error(
				ctx,
				"delete rotate-root-password custom status failed",
				zap.Uint64("cluster_id", eventBody.ClusterID),
				zap.Uint64("status_id", status.StatusId),
				zap.Error(delErr),
			)
		}
	}

	return nil
}
