package routes

import (
	"github.com/gofiber/fiber/v2"

	"github.com/break/junhong_cmp_fiber/internal/bootstrap"
	"github.com/break/junhong_cmp_fiber/pkg/openapi"
)

// RegisterAdminRoutes 注册管理后台相关路由
func RegisterAdminRoutes(router fiber.Router, handlers *bootstrap.Handlers, middlewares *bootstrap.Middlewares, doc *openapi.Generator, basePath string) {
	// 认证路由已迁移到 /api/auth，参见 RegisterAuthRoutes
	authGroup := router.Group("", middlewares.AdminAuth)

	if handlers.Account != nil {
		registerAccountRoutes(authGroup, handlers.Account, doc, basePath)
	}
	if handlers.Role != nil {
		registerRoleRoutes(authGroup, handlers.Role, doc, basePath)
	}
	if handlers.Permission != nil {
		registerPermissionRoutes(authGroup, handlers.Permission, doc, basePath)
	}
	if handlers.Shop != nil {
		registerShopRoutes(authGroup, handlers.Shop, doc, basePath)
	}
	if handlers.ShopRole != nil {
		registerShopRoleRoutes(authGroup, handlers.ShopRole, doc, basePath)
	}

	if handlers.ShopCommission != nil {
		registerShopCommissionRoutes(authGroup, handlers.ShopCommission, doc, basePath)
	}
	if handlers.Shop != nil {
		registerShopDetailRoute(authGroup, handlers.Shop, doc, basePath)
	}
	if handlers.CommissionWithdrawal != nil {
		registerCommissionWithdrawalRoutes(authGroup, handlers.CommissionWithdrawal, doc, basePath)
	}
	if handlers.CommissionWithdrawalSetting != nil {
		registerCommissionWithdrawalSettingRoutes(authGroup, handlers.CommissionWithdrawalSetting, doc, basePath)
	}
	if handlers.Enterprise != nil {
		registerEnterpriseRoutes(authGroup, handlers.Enterprise, doc, basePath)
	}
	if handlers.EnterpriseCard != nil {
		registerEnterpriseCardRoutes(authGroup, handlers.EnterpriseCard, doc, basePath)
	}
	if handlers.EnterpriseDevice != nil {
		registerEnterpriseDeviceRoutes(authGroup, handlers.EnterpriseDevice, doc, basePath)
	}
	if handlers.Authorization != nil {
		registerAuthorizationRoutes(authGroup, handlers.Authorization, doc, basePath)
	}

	if handlers.IotCard != nil {
		registerIotCardRoutes(authGroup, handlers.IotCard, handlers.IotCardImport, doc, basePath)
	}
	if handlers.ExportTask != nil {
		registerExportTaskRoutes(authGroup, handlers.ExportTask, doc, basePath)
	}
	if handlers.Notification != nil {
		registerNotificationRoutes(authGroup, handlers.Notification, doc, basePath)
	}
	if handlers.Device != nil {
		registerDeviceRoutes(authGroup, handlers.Device, handlers.DeviceImport, doc, basePath)
	}
	if handlers.AssetLifecycle != nil {
		registerAssetLifecycleRoutes(authGroup, handlers.AssetLifecycle, doc, basePath)
	}
	if handlers.AssetAllocationRecord != nil {
		registerAssetAllocationRecordRoutes(authGroup, handlers.AssetAllocationRecord, doc, basePath)
	}
	if handlers.Storage != nil {
		registerStorageRoutes(authGroup, handlers.Storage, doc, basePath)
	}
	if handlers.Carrier != nil {
		registerCarrierRoutes(authGroup, handlers.Carrier, doc, basePath)
	}
	if handlers.PackageSeries != nil {
		registerPackageSeriesRoutes(authGroup, handlers.PackageSeries, doc, basePath)
	}
	if handlers.Package != nil {
		registerPackageRoutes(authGroup, handlers.Package, doc, basePath)
	}
	if handlers.PackageUsage != nil {
		registerPackageUsageRoutes(authGroup, handlers.PackageUsage, doc, basePath)
	}
	if handlers.ShopPackageBatchAllocation != nil {
		registerShopPackageBatchAllocationRoutes(authGroup, handlers.ShopPackageBatchAllocation, doc, basePath)
	}
	if handlers.ShopPackageBatchPricing != nil {
		registerShopPackageBatchPricingRoutes(authGroup, handlers.ShopPackageBatchPricing, doc, basePath)
	}
	if handlers.ShopSeriesGrant != nil {
		registerShopSeriesGrantRoutes(authGroup, handlers.ShopSeriesGrant, doc, basePath)
	}
	if handlers.AdminOrder != nil {
		registerAdminOrderRoutes(authGroup, handlers.AdminOrder, doc, basePath)
	}
	if handlers.AdminExchange != nil {
		registerAdminExchangeRoutes(authGroup, handlers.AdminExchange, doc, basePath)
	}
	if handlers.PollingConfig != nil {
		registerPollingConfigRoutes(authGroup, handlers.PollingConfig, doc, basePath)
	}
	if handlers.PollingConcurrency != nil {
		registerPollingConcurrencyRoutes(authGroup, handlers.PollingConcurrency, doc, basePath)
	}
	if handlers.PollingMonitoring != nil {
		registerPollingMonitoringRoutes(authGroup, handlers.PollingMonitoring, doc, basePath)
	}
	if handlers.PollingAlert != nil {
		registerPollingAlertRoutes(authGroup, handlers.PollingAlert, doc, basePath)
	}
	if handlers.PollingCleanup != nil {
		registerPollingCleanupRoutes(authGroup, handlers.PollingCleanup, doc, basePath)
	}
	if handlers.PollingManualTrigger != nil {
		registerPollingManualTriggerRoutes(authGroup, handlers.PollingManualTrigger, doc, basePath)
	}
	if handlers.Asset != nil {
		registerAssetRoutes(authGroup, handlers.Asset, handlers.AssetWallet, doc, basePath)
		registerPackageExpiryRoutes(authGroup, handlers.Asset, doc, basePath)
	}
	if handlers.WechatConfig != nil {
		registerWechatConfigRoutes(authGroup, handlers.WechatConfig, doc, basePath)
	}
	if handlers.AgentRecharge != nil {
		registerAgentRechargeRoutes(authGroup, handlers.AgentRecharge, doc, basePath)
	}
	if handlers.Refund != nil {
		registerRefundRoutes(authGroup, handlers.Refund, doc, basePath)
	}
	if handlers.OrderPackageInvalidate != nil {
		registerOrderPackageInvalidateRoutes(authGroup, handlers.OrderPackageInvalidate, doc, basePath)
	}
	if handlers.AssetPackageBatchOrder != nil {
		registerAssetPackageBatchOrderRoutes(authGroup, handlers.AssetPackageBatchOrder, doc, basePath)
	}
	if handlers.SuperAdmin != nil {
		registerSuperAdminRoutes(authGroup, handlers.SuperAdmin, doc, basePath)
	}
	if handlers.SystemConfig != nil {
		registerSystemConfigRoutes(authGroup, handlers.SystemConfig, doc, basePath)
	}
	if handlers.WeCom != nil {
		registerWeComRoutes(authGroup, handlers.WeCom, doc, basePath)
	}
}
