package export

import (
	"context"

	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"
	"github.com/tidbcloud/tidb-management-service/utilities/grpc/metadata"
)

func (s *serverImpl) ListExports(
	ctx context.Context,
	req *openapingv1beta2.ListExportsRequest,
) (*openapingv1beta2.ListExportsResponse, error) {
	ctx, span := tracer.Start(ctx, "ListExports")
	defer span.End()

	_, err := metadata.ExtractRequestMetaWithCheckPermission(ctx)
	if err != nil {
		return nil, bizerr.WrapErrorWithCode(err, bizerr.ErrCodeParams, "failed to extract request metadata")
	}

	resp, err := s.nextGenCli.ListExports(ctx, &globalngv1.ListExportsRequest{
		ClusterId: req.TidbId,
		PageSize:  req.PageSize,
		PageToken: req.PageToken,
		Skip:      req.Skip,
	})
	if err != nil {
		return nil, err
	}

	exports := make([]*openapingv1beta2.Export, len(resp.Exports))
	for i, e := range resp.Exports {
		exports[i] = ToOpenAPIExport(e)
	}
	return &openapingv1beta2.ListExportsResponse{
		Exports:       exports,
		TotalSize:     resp.TotalSize,
		NextPageToken: resp.NextPageToken,
	}, nil
}
