package wechat

import (
	"encoding/base64"
	"fmt"
	"net/http"

	"mini-chat/internal/code"
	"mini-chat/internal/pkg/core"
	"mini-chat/internal/pkg/wechat"
)

type generateQRCodeRequest struct {
	AppID     string `json:"app_id" binding:"required"`     // 微信小程序 AppID
	AppSecret string `json:"app_secret" binding:"required"` // 微信小程序 AppSecret
	Path      string `json:"path" binding:"required"`       // 小程序页面路径
}

type generateQRCodeResponse struct {
	Success bool   `json:"success"`
	Message string `json:"message"`
	Data    string `json:"data"` // Base64 编码的图片数据
}

// GenerateQRCode 生成微信小程序二维码
// @Summary 生成微信小程序二维码
// @Description 根据 AppID、AppSecret 和页面路径生成微信小程序二维码
// @Tags 微信
// @Accept json
// @Produce json
// @Param request body generateQRCodeRequest true "请求参数"
// @Success 200 {object} generateQRCodeResponse
// @Failure 400 {object} code.Failure
// @Failure 500 {object} code.Failure
// @Router /api/wechat/qrcode [post]
func (h *handler) GenerateQRCode() core.HandlerFunc {
	return func(ctx core.Context) {
		req := new(generateQRCodeRequest)
		if err := ctx.ShouldBindJSON(req); err != nil {
			ctx.AbortWithError(core.Error(
				http.StatusBadRequest,
				code.ParamBindError,
				code.Text(code.ParamBindError),
			))
			return
		}

		// 调用微信小程序二维码生成函数
		imageData, err := wechat.GenerateQRCode(ctx, req.AppID, req.AppSecret, req.Path)
		if err != nil {
			h.logger.Error(fmt.Sprintf("生成微信小程序二维码失败: %s", err.Error()))
			ctx.AbortWithError(core.Error(
				http.StatusInternalServerError,
				code.ServerError,
				err.Error(),
			))
			return
		}

		// 将图片数据转换为 Base64 编码
		base64Data := base64.StdEncoding.EncodeToString(imageData)

		res := &generateQRCodeResponse{
			Success: true,
			Message: "二维码生成成功",
			Data:    base64Data,
		}

		ctx.Payload(res)
	}
}
