package main

import (
	"github.com/gofiber/fiber/v2"
	"go.uber.org/zap"

	"github.com/break/junhong_cmp_fiber/internal/bootstrap"
	"github.com/break/junhong_cmp_fiber/internal/handler/admin"
	"github.com/break/junhong_cmp_fiber/internal/handler/callback"
	"github.com/break/junhong_cmp_fiber/internal/routes"
	"github.com/break/junhong_cmp_fiber/pkg/openapi"
)

// generateOpenAPIDocs 生成 OpenAPI 文档
// outputPath: 文档输出路径
// logger: 日志记录器
// 生成失败时记录错误但不影响程序继续运行
func generateOpenAPIDocs(outputPath string, logger *zap.Logger) {
	// 1. 创建生成器
	adminDoc := openapi.NewGenerator("君鸿卡管系统 API", "1.0.0")

	// 2. 创建临时 Fiber App 用于路由注册
	app := fiber.New()

	// 3. 创建所有 Handler（使用 nil 依赖，因为只需要路由结构）
	// 新增 Handler 必须注册到 openapi.BuildDocHandlers，代理开放接口也从该入口进入文档生成器。
	handlers := openapi.BuildDocHandlers()
	handlers.AssetPackageBatchOrder = admin.NewAssetPackageBatchOrderHandler(nil, nil)
	// 企业微信 Handler 在此显式装配，避免新增管理接口遗漏文档注册。
	handlers.WeCom = admin.NewWeComHandler(nil, nil)
	handlers.CTCCRealnameCallback = callback.NewCTCCRealnameHandler(nil, nil, nil, nil, nil, nil, nil)
	handlers.CMCCRealnameCallback = callback.NewCMCCRealnameHandler(nil, nil, nil, nil, nil, nil, nil)
	handlers.CUCCRealnameCallback = callback.NewCUCCRealnameHandler(nil, nil, nil, nil, nil, nil, nil)
	handlers.CUCCRealnameRemovalCallback = callback.NewCUCCRealnameRemovalHandler(nil, nil, nil, nil, nil)
	handlers.WeComApprovalCallback = callback.NewWeComApprovalHandler(nil)

	// 4. 注册所有路由到文档生成器
	routes.RegisterRoutesWithDoc(app, handlers, &bootstrap.Middlewares{}, adminDoc)

	// 5. 保存规范到指定路径
	if err := adminDoc.Save(outputPath); err != nil {
		logger.Error("生成 OpenAPI 文档失败", zap.String("path", outputPath), zap.Error(err))
		return
	}

	logger.Info("OpenAPI 文档生成成功", zap.String("path", outputPath))
}
