package region

import (
	"context"

	"google.golang.org/protobuf/types/known/emptypb"

	globalcommonv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/common/v1"
	globalserverlessv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/serverless/v1"
	"github.com/tidbcloud/tidb-management-service/serverless-global-service/domain/service/region"
)

type service struct {
	regionSvc region.Service
}

func NewService(regionSvc region.Service) globalserverlessv1.RegionServiceServer {
	return &service{
		regionSvc: regionSvc,
	}
}

func (p *service) Register(
	ctx context.Context,
	req *globalserverlessv1.RegionServiceRegisterRequest,
) (*globalcommonv1.Region, error) {
	return p.regionSvc.RegisterRegion(ctx, req)
}

func (p *service) List(
	ctx context.Context,
	req *globalserverlessv1.RegionServiceListRequest,
) (*globalserverlessv1.RegionServiceListResponse, error) {
	return p.regionSvc.ListRegions(ctx, req)
}

func (p *service) Update(
	ctx context.Context,
	req *globalserverlessv1.RegionServiceUpdateRequest,
) (*globalcommonv1.Region, error) {
	return p.regionSvc.UpdateRegion(ctx, req)
}

func (p *service) Get(
	ctx context.Context,
	req *globalserverlessv1.RegionServiceGetRequest,
) (*globalcommonv1.Region, error) {
	return p.regionSvc.GetRegion(ctx, req)
}

func (p *service) Delete(
	ctx context.Context,
	req *globalserverlessv1.RegionServiceDeleteRequest,
) (*emptypb.Empty, error) {
	err := p.regionSvc.DeleteRegion(ctx, req)
	if err != nil {
		return nil, err
	}
	return &emptypb.Empty{}, nil
}
