package planreplayer

import (
	"context"
	"strconv"

	globalngv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1"
	openapingv1beta2 "github.com/tidbcloud/tidb-management-service/api/spec/tidb_cloud_open_api/nextgen/v1beta2"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

func (s *serverImpl) GetPlanReplayerStatus(
	ctx context.Context,
	req *openapingv1beta2.GetPlanReplayerStatusRequest,
) (*openapingv1beta2.PlanReplayerStatus, error) {
	ctx, span := tracer.Start(ctx, "GetPlanReplayerStatus")
	defer span.End()

	tidbID, err := strconv.ParseUint(req.GetTidbId(), 10, 64)
	if err != nil {
		return nil, bizerr.WrapErrorWithCode(err, bizerr.ErrCodeParams, "invalid tidb id")
	}

	status, err := s.nextgenCli.GetPlanReplayerStatus(ctx, &globalngv1.GetPlanReplayerStatusRequest{ClusterId: tidbID})
	if err != nil {
		return nil, err
	}

	return cvtGlobalToOpenapiStatus(status), nil
}

func cvtGlobalToOpenapiStatus(in *globalngv1.PlanReplayerStatus) *openapingv1beta2.PlanReplayerStatus {
	if in == nil {
		return nil
	}
	return &openapingv1beta2.PlanReplayerStatus{
		TidbId:     strconv.FormatUint(in.GetClusterId(), 10),
		Enabled:    in.GetEnabled(),
		ExpireTime: in.GetExpireTime(),
	}
}
