package capacitytemplate

import (
	"context"

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

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

func (s serverImpl) CreateReservedCapacityTemplate(
	ctx context.Context,
	request *tidbmgmtservicev1.CreateReservedCapacityTemplateRequest,
) (*globalngv1.ReservedCapacityTemplate, error) {
	return s.nextgenCli.CreateReservedCapacityTemplate(ctx, &globalngv1.CreateReservedCapacityTemplateRequest{
		ReservedCapacityTemplate: request.GetReservedCapacityTemplate(),
	})
}

func (s serverImpl) GetReservedCapacityTemplate(ctx context.Context,
	request *tidbmgmtservicev1.GetReservedCapacityTemplateRequest) (*globalngv1.ReservedCapacityTemplate, error) {
	return s.nextgenCli.GetReservedCapacityTemplate(ctx, &globalngv1.GetReservedCapacityTemplateRequest{
		CapacityTemplateId: request.GetCapacityTemplateId(),
	})
}

func (s serverImpl) ListReservedCapacityTemplates(ctx context.Context,
	request *tidbmgmtservicev1.ListReservedCapacityTemplatesRequest,
) (*tidbmgmtservicev1.ListReservedCapacityTemplatesResponse, error) {
	resp, err := s.nextgenCli.ListReservedCapacityTemplates(ctx, &globalngv1.ListReservedCapacityTemplatesRequest{
		OrganizationId:     request.GetOrganizationId(),
		WorkloadType:       request.GetWorkloadType(),
		Qps:                request.GetQps(),
		DataSizeGib:        request.GetDataSizeGib(),
		P99ResponseLatency: request.GetP99ResponseLatency(),
		Status:             request.GetStatus(),
		Scope:              request.GetScope(),
		ServicePlan:        request.GetServicePlan(),
		PageSize:           request.GetPageSize(),
		Page:               request.GetPage(),
	})
	if err != nil {
		return nil, err
	}

	return &tidbmgmtservicev1.ListReservedCapacityTemplatesResponse{
		ReservedCapacityTemplates: resp.GetReservedCapacityTemplates(),
		Total:                     resp.GetTotal(),
	}, nil
}

func (s serverImpl) UpdateReservedCapacityTemplateStatus(ctx context.Context,
	request *tidbmgmtservicev1.UpdateReservedCapacityTemplateStatusRequest,
) (*globalngv1.ReservedCapacityTemplate, error) {
	return s.nextgenCli.UpdateReservedCapacityTemplateStatus(ctx, &globalngv1.UpdateReservedCapacityTemplateStatusRequest{
		CapacityTemplateId: request.GetCapacityTemplateId(),
		Status:             request.GetStatus(),
	})
}

func (s serverImpl) DeleteReservedCapacityTemplate(ctx context.Context,
	request *tidbmgmtservicev1.DeleteReservedCapacityTemplateRequest,
) (*emptypb.Empty, error) {
	return s.nextgenCli.DeleteReservedCapacityTemplate(ctx, &globalngv1.DeleteReservedCapacityTemplateRequest{
		CapacityTemplateId: request.GetCapacityTemplateId(),
	})
}
