package reservedcapacitytemplate

import (
	"context"

	"go.opentelemetry.io/otel"

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

var tracer = otel.Tracer("domain.reservedcapacitytemplate")

type Service interface {
	Create(ctx context.Context, req *globalngv1.CreateReservedCapacityTemplateRequest) (*entity.ReservedCapacityTemplate, bizerr.BizError)
	Get(ctx context.Context, req *globalngv1.GetReservedCapacityTemplateRequest) (*entity.ReservedCapacityTemplate, bizerr.BizError)
	List(
		ctx context.Context,
		req *globalngv1.ListReservedCapacityTemplatesRequest,
	) (*globalngv1.ListReservedCapacityTemplatesResponse, bizerr.BizError)
	UpdateStatus(ctx context.Context, req *globalngv1.UpdateReservedCapacityTemplateStatusRequest) (*entity.ReservedCapacityTemplate, bizerr.BizError)
	Delete(ctx context.Context, req *globalngv1.DeleteReservedCapacityTemplateRequest) bizerr.BizError
}

type serviceImpl struct {
	repo               reservedcapacitytemplaterepo.Repo
	idGeneratorAdapter idgenerator.IDGenerator
}

func NewService(repo reservedcapacitytemplaterepo.Repo, idGeneratorAdapter idgenerator.IDGenerator) Service {
	return &serviceImpl{
		repo:               repo,
		idGeneratorAdapter: idGeneratorAdapter,
	}
}
