package routes

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

	"github.com/break/junhong_cmp_fiber/internal/handler/admin"
	"github.com/break/junhong_cmp_fiber/internal/model/dto"
	"github.com/break/junhong_cmp_fiber/pkg/openapi"
)

func registerShopRoutes(router fiber.Router, handler *admin.ShopHandler, doc *openapi.Generator, basePath string) {
	shops := router.Group("/shops")
	groupPath := basePath + "/shops"

	Register(shops, doc, groupPath, "GET", "", handler.List, RouteSpec{
		Summary: "店铺列表",
		Tags:    []string{"店铺管理"},
		Input:   new(dto.ShopListRequest),
		Output:  new(dto.ShopPageResult),
		Auth:    true,
	})

	Register(shops, doc, groupPath, "POST", "", handler.Create, RouteSpec{
		Summary: "创建店铺",
		Tags:    []string{"店铺管理"},
		Input:   new(dto.CreateShopRequest),
		Output:  new(dto.ShopResponse),
		Auth:    true,
	})

	Register(shops, doc, groupPath, "PUT", "/:id", handler.Update, RouteSpec{
		Summary: "更新店铺",
		Tags:    []string{"店铺管理"},
		Input:   new(dto.UpdateShopParams),
		Output:  new(dto.ShopResponse),
		Auth:    true,
	})

	Register(shops, doc, groupPath, "DELETE", "/:id", handler.Delete, RouteSpec{
		Summary: "删除店铺",
		Tags:    []string{"店铺管理"},
		Input:   new(dto.IDReq),
		Output:  nil,
		Auth:    true,
	})

	Register(shops, doc, groupPath, "GET", "/cascade", handler.Cascade, RouteSpec{
		Summary: "店铺联级查询",
		Tags:    []string{"店铺管理"},
		Input:   new(dto.ShopCascadeRequest),
		Output:  new([]dto.ShopCascadeItem),
		Auth:    true,
	})
}

func registerShopRoleRoutes(router fiber.Router, handler *admin.ShopRoleHandler, doc *openapi.Generator, basePath string) {
	shops := router.Group("/shops")
	groupPath := basePath + "/shops"

	Register(shops, doc, groupPath, "POST", "/:shop_id/roles", handler.AssignShopRoles, RouteSpec{
		Summary: "分配店铺默认角色",
		Tags:    []string{"店铺管理"},
		Input:   new(dto.AssignShopRolesRequest),
		Output:  new(dto.ShopRolesResponse),
		Auth:    true,
	})

	Register(shops, doc, groupPath, "GET", "/:shop_id/roles", handler.GetShopRoles, RouteSpec{
		Summary: "查询店铺默认角色",
		Tags:    []string{"店铺管理"},
		Input:   new(dto.GetShopRolesRequest),
		Output:  new(dto.ShopRolesResponse),
		Auth:    true,
	})

	Register(shops, doc, groupPath, "DELETE", "/:shop_id/roles/:role_id", handler.DeleteShopRole, RouteSpec{
		Summary: "删除店铺默认角色",
		Tags:    []string{"店铺管理"},
		Input:   new(dto.DeleteShopRoleRequest),
		Output:  nil,
		Auth:    true,
	})
}

func registerShopCommissionRoutes(router fiber.Router, handler *admin.ShopCommissionHandler, doc *openapi.Generator, basePath string) {
	shops := router.Group("/shops")
	groupPath := basePath + "/shops"

	Register(shops, doc, groupPath, "GET", "/fund-summary", handler.ListFundSummary, RouteSpec{
		Summary: "代理商资金概况",
		Tags:    []string{"代理商资金管理"},
		Input:   new(dto.ShopFundSummaryListReq),
		Output:  new(dto.ShopFundSummaryPageResult),
		Auth:    true,
	})

	Register(shops, doc, groupPath, "GET", "/:shop_id/withdrawal-requests", handler.ListWithdrawalRequests, RouteSpec{
		Summary: "代理商提现记录",
		Tags:    []string{"代理商资金管理"},
		Input:   new(dto.ShopWithdrawalRequestListReq),
		Output:  new(dto.ShopWithdrawalRequestPageResult),
		Auth:    true,
	})

	Register(shops, doc, groupPath, "GET", "/:shop_id/commission-records", handler.ListCommissionRecords, RouteSpec{
		Summary: "代理商佣金明细",
		Tags:    []string{"代理商资金管理"},
		Input:   new(dto.ShopCommissionRecordListReq),
		Output:  new(dto.ShopCommissionRecordPageResult),
		Auth:    true,
	})

	Register(shops, doc, groupPath, "GET", "/:shop_id/main-wallet/transactions", handler.ListMainWalletTransactions, RouteSpec{
		Summary: "代理商预充值钱包流水",
		Tags:    []string{"代理商资金管理"},
		Input:   new(dto.MainWalletTransactionListRequest),
		Output:  new(dto.MainWalletTransactionListResponse),
		Auth:    true,
	})

	Register(shops, doc, groupPath, "GET", "/:shop_id/commission-stats", handler.GetCommissionStats, RouteSpec{
		Summary: "代理商佣金统计",
		Tags:    []string{"代理商资金管理"},
		Input:   new(dto.CommissionStatsRequest),
		Output:  new(dto.CommissionStatsResponse),
		Auth:    true,
	})

	Register(shops, doc, groupPath, "GET", "/:shop_id/commission-daily-stats", handler.GetCommissionDailyStats, RouteSpec{
		Summary: "代理商每日佣金统计",
		Tags:    []string{"代理商资金管理"},
		Input:   new(dto.DailyCommissionStatsRequest),
		Output:  []dto.DailyCommissionStatsResponse{},
		Auth:    true,
	})

	Register(shops, doc, groupPath, "POST", "/:shop_id/withdrawal-requests", handler.CreateWithdrawal, RouteSpec{
		Summary: "发起提现申请",
		Tags:    []string{"代理商资金管理"},
		Input:   new(dto.CreateMyWithdrawalReq),
		Output:  new(dto.CreateMyWithdrawalResp),
		Auth:    true,
	})

	commissionRecords := router.Group("/commission-records")
	crPath := basePath + "/commission-records"

	Register(commissionRecords, doc, crPath, "POST", "/:id/resolve", handler.ResolveCommissionRecord, RouteSpec{
		Summary: "修正待审佣金记录",
		Tags:    []string{"代理商资金管理"},
		Input:   new(dto.CommissionRecordResolveRequest),
		Auth:    true,
	})
}
