package v1

import (
	"github.com/pingcap-inc/pchub/internal/apiserver/store"
)

type Service interface {
	User() UserSrv
	Common() ComSrv
	Approval() ApprovalSrv
	LarkEvent() LarkEventSrv
	Billing() BillingSrv
	Department() DepartmentSrv
	CloudResource() CloudResourceSrv
	MemberRole() MemberRoleSrv
	ApprOptions() ApprOptionsSrv
	Budget() BudgetSrv
	Provider() ProviderSrv
	LarkChat() LarkChatSrv
	StarResource() StarResourceSrv
	Alert() AlertSrv
	ResourceManager() ResourceManagerSrv
	PCHPermission() PCHPermissionSrv
	Cron() CronSrv
}

type service struct {
	store store.Factory
}

func NewService(store store.Factory) Service {
	return &service{
		store: store,
	}
}

func (s *service) User() UserSrv {
	return newUser(s)
}

func (s *service) Common() ComSrv {
	return newCommon(s)
}

func (s *service) Approval() ApprovalSrv {
	return newApproval(s)
}

func (s *service) ApprOptions() ApprOptionsSrv {
	return newApprOptions(s)
}

func (s *service) LarkEvent() LarkEventSrv {
	return newLarkEvent(s)
}

func (s *service) Billing() BillingSrv {
	return newBilling(s)
}

func (s *service) Department() DepartmentSrv {
	return newDepartment(s)
}

func (s *service) CloudResource() CloudResourceSrv {
	return newCloudResource(s)
}

func (s *service) MemberRole() MemberRoleSrv {
	return newMemberRole(s)
}

func (s *service) Provider() ProviderSrv {
	return newProvider(s)
}

func (s *service) Budget() BudgetSrv {
	return newBudget(s)
}

func (s *service) LarkChat() LarkChatSrv {
	return newLarkChat(s)
}

func (s *service) Alert() AlertSrv {
	return newAlert(s)
}

func (s *service) ResourceManager() ResourceManagerSrv {
	return newResourceManager(s)
}

func (s *service) StarResource() StarResourceSrv {
	return newStarResource(s)
}

func (s *service) Cron() CronSrv {
	return newCronSrv(s)
}

func (s *service) PCHPermission() PCHPermissionSrv {
	return newPCHPermission(s)
}
