package bootstrap

import (
	"github.com/break/junhong_cmp_fiber/internal/store/postgres"
)

type stores struct {
	Account                           *postgres.AccountStore
	AccountOperationLog               *postgres.AccountOperationLogStore
	Shop                              *postgres.ShopStore
	Role                              *postgres.RoleStore
	Permission                        *postgres.PermissionStore
	AccountRole                       *postgres.AccountRoleStore
	RolePermission                    *postgres.RolePermissionStore
	PersonalCustomer                  *postgres.PersonalCustomerStore
	PersonalCustomerPhone             *postgres.PersonalCustomerPhoneStore
	Wallet                            *postgres.WalletStore
	CommissionWithdrawalRequest       *postgres.CommissionWithdrawalRequestStore
	CommissionRecord                  *postgres.CommissionRecordStore
	WalletTransaction                 *postgres.WalletTransactionStore
	CommissionWithdrawalSetting       *postgres.CommissionWithdrawalSettingStore
	Enterprise                        *postgres.EnterpriseStore
	EnterpriseCardAuthorization       *postgres.EnterpriseCardAuthorizationStore
	EnterpriseDeviceAuthorization     *postgres.EnterpriseDeviceAuthorizationStore
	IotCard                           *postgres.IotCardStore
	IotCardImportTask                 *postgres.IotCardImportTaskStore
	Device                            *postgres.DeviceStore
	DeviceSimBinding                  *postgres.DeviceSimBindingStore
	DeviceImportTask                  *postgres.DeviceImportTaskStore
	AssetAllocationRecord             *postgres.AssetAllocationRecordStore
	Carrier                           *postgres.CarrierStore
	PackageSeries                     *postgres.PackageSeriesStore
	Package                           *postgres.PackageStore
	ShopSeriesAllocation              *postgres.ShopSeriesAllocationStore
	ShopSeriesOneTimeCommissionTier   *postgres.ShopSeriesOneTimeCommissionTierStore
	ShopSeriesAllocationConfig        *postgres.ShopSeriesAllocationConfigStore
	ShopPackageAllocation             *postgres.ShopPackageAllocationStore
	ShopPackageAllocationPriceHistory *postgres.ShopPackageAllocationPriceHistoryStore
	ShopSeriesCommissionStats         *postgres.ShopSeriesCommissionStatsStore
	Order                             *postgres.OrderStore
	OrderItem                         *postgres.OrderItemStore
	Recharge                          *postgres.RechargeStore
}

func initStores(deps *Dependencies) *stores {
	return &stores{
		Account:                           postgres.NewAccountStore(deps.DB, deps.Redis),
		AccountOperationLog:               postgres.NewAccountOperationLogStore(deps.DB),
		Shop:                              postgres.NewShopStore(deps.DB, deps.Redis),
		Role:                              postgres.NewRoleStore(deps.DB),
		Permission:                        postgres.NewPermissionStore(deps.DB),
		AccountRole:                       postgres.NewAccountRoleStore(deps.DB, deps.Redis),
		RolePermission:                    postgres.NewRolePermissionStore(deps.DB, deps.Redis),
		PersonalCustomer:                  postgres.NewPersonalCustomerStore(deps.DB, deps.Redis),
		PersonalCustomerPhone:             postgres.NewPersonalCustomerPhoneStore(deps.DB),
		Wallet:                            postgres.NewWalletStore(deps.DB, deps.Redis),
		CommissionWithdrawalRequest:       postgres.NewCommissionWithdrawalRequestStore(deps.DB, deps.Redis),
		CommissionRecord:                  postgres.NewCommissionRecordStore(deps.DB, deps.Redis),
		WalletTransaction:                 postgres.NewWalletTransactionStore(deps.DB, deps.Redis),
		CommissionWithdrawalSetting:       postgres.NewCommissionWithdrawalSettingStore(deps.DB, deps.Redis),
		Enterprise:                        postgres.NewEnterpriseStore(deps.DB, deps.Redis),
		EnterpriseCardAuthorization:       postgres.NewEnterpriseCardAuthorizationStore(deps.DB, deps.Redis),
		EnterpriseDeviceAuthorization:     postgres.NewEnterpriseDeviceAuthorizationStore(deps.DB, deps.Redis),
		IotCard:                           postgres.NewIotCardStore(deps.DB, deps.Redis),
		IotCardImportTask:                 postgres.NewIotCardImportTaskStore(deps.DB, deps.Redis),
		Device:                            postgres.NewDeviceStore(deps.DB, deps.Redis),
		DeviceSimBinding:                  postgres.NewDeviceSimBindingStore(deps.DB, deps.Redis),
		DeviceImportTask:                  postgres.NewDeviceImportTaskStore(deps.DB, deps.Redis),
		AssetAllocationRecord:             postgres.NewAssetAllocationRecordStore(deps.DB, deps.Redis),
		Carrier:                           postgres.NewCarrierStore(deps.DB),
		PackageSeries:                     postgres.NewPackageSeriesStore(deps.DB),
		Package:                           postgres.NewPackageStore(deps.DB),
		ShopSeriesAllocation:              postgres.NewShopSeriesAllocationStore(deps.DB),
		ShopSeriesOneTimeCommissionTier:   postgres.NewShopSeriesOneTimeCommissionTierStore(deps.DB),
		ShopSeriesAllocationConfig:        postgres.NewShopSeriesAllocationConfigStore(deps.DB),
		ShopPackageAllocation:             postgres.NewShopPackageAllocationStore(deps.DB),
		ShopPackageAllocationPriceHistory: postgres.NewShopPackageAllocationPriceHistoryStore(deps.DB),
		ShopSeriesCommissionStats:         postgres.NewShopSeriesCommissionStatsStore(deps.DB),
		Order:                             postgres.NewOrderStore(deps.DB, deps.Redis),
		OrderItem:                         postgres.NewOrderItemStore(deps.DB, deps.Redis),
		Recharge:                          postgres.NewRechargeStore(deps.DB, deps.Redis),
	}
}
