package store

import "gorm.io/gorm"

var client Factory

// Factory defines the platform storage interface.
type Factory interface {
	User() UserStore
	Department() DepartmentStore
	UserDepartment() UserDepartmentStore
	CloudResource() CloudResourceStore
	Approval() ApprovalStore
	CloudProvider() CloudProviderStore
	CloudBudget() CloudBudgetStore
	CloudMemberRole() CloudMemberRoleStore
	ResourceMemberAccess() ResourceMemberAccessStore
	ApprovalType() ApprovalTypeStore
	LarkApprWidget() LarkApprWidgetStore
	CostAlert() CostAlertStore
	AlertRecord() AlertRecordStore
	UserStarResource() UserStarResourceStore
	CloudProductCost() CloudProductCostStore
	LarkChat() LarkChatStore
	PCHPermission() PCHPermissionStore
	TrustAdvisor() TrustAdvisorStore
	Close() error
	GetDB() *gorm.DB
}

// Client return the store client instance.
func Client() Factory {
	return client
}

// SetClient set the store client.
func SetClient(factory Factory) {
	client = factory
}
