package byocvpcpeering

import (
	"context"

	dataplanemanagerv1 "github.com/tidbcloud/cluster-service-ng/api/tidbcloud/dataplane-manager/v1"

	globalngv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1"
	"github.com/tidbcloud/tidb-management-service/nextgen-global-service/domain/entity"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

func (s *serviceImpl) GetVpcPeering(
	ctx context.Context,
	req *globalngv1.GetVpcPeeringRequest,
) (*entity.VpcPeering, bizerr.BizError) {
	ctx, span := tracer.Start(ctx, "ByocVpcPeeringService.GetVpcPeering")
	defer span.End()

	if req.GetClusterId() == 0 {
		return nil, bizerr.New(bizerr.ErrCodeParams, "cluster_id is required")
	}
	if req.GetVpcPeeringId() == "" {
		return nil, bizerr.New(bizerr.ErrCodeParams, "vpc_peering_id is required")
	}
	cluster, err := s.clusterRepo.Get(ctx, req.GetClusterId(), false)
	if err != nil {
		return nil, err
	}
	if cluster.GetDataplaneId() == "" {
		return nil, bizerr.New(bizerr.ErrCodeParams, "dataplane_id is required")
	}
	region, err := s.regionRepo.Get(ctx, cluster.RegionId)
	if err != nil {
		return nil, err
	}

	peering, err := s.regionalCli.GetVpcPeering(ctx, region, &dataplanemanagerv1.GetVpcPeeringRequest{
		DataPlaneId:  cluster.GetDataplaneId(),
		VpcPeeringId: req.GetVpcPeeringId(),
	})
	if err != nil {
		return nil, err
	}

	return cvtDataplanePeeringToGlobal(cluster.GetClusterId(), peering)
}
