package rcuquota

import (
	"context"

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

type server struct {
	rcuQuotaSvc rcuquota.Service
}

func NewServer(
	rcuQuotaSvc rcuquota.Service,
) globalngv1.RcuQuotaServiceServer {
	return &server{
		rcuQuotaSvc: rcuQuotaSvc,
	}
}

func (s server) GetRcuQuota(ctx context.Context,
	request *globalngv1.GetRcuQuotaRequest) (*globalngv1.RcuQuota, error) {
	r, err := s.rcuQuotaSvc.GetRcuQuota(ctx, request)
	if err != nil {
		return nil, err
	}
	return r, nil
}

func (s server) CalculateMinRcu(ctx context.Context,
	request *globalngv1.CalculateMinRcuRequest) (*globalngv1.CalculateMinRcuResponse, error) {
	r, err := s.rcuQuotaSvc.CalculateMinRcu(ctx, request)
	if err != nil {
		return nil, err
	}
	return r, nil
}

func (s server) ListOrgRcuQuotas(ctx context.Context,
	request *globalngv1.ListOrgRcuQuotasRequest) (*globalngv1.ListOrgRcuQuotasResponse, error) {
	r, err := s.rcuQuotaSvc.ListOrgRcuQuotas(ctx, request)
	if err != nil {
		return nil, err
	}
	return &globalngv1.ListOrgRcuQuotasResponse{
		RcuQuotas: r,
	}, nil
}

func (s server) UpdateRcuQuota(ctx context.Context,
	request *globalngv1.UpdateRcuQuotaRequest) (*globalngv1.RcuQuota, error) {
	r, err := s.rcuQuotaSvc.UpdateRcuQuota(ctx, request)
	if err != nil {
		return nil, err
	}
	return r, nil
}
