package controller

import (
	"fengkuangGameServerJob/pkg/payment"
	"fengkuangGameServerJob/service"
	"github.com/gin-gonic/gin"
	"log"
	"net/http"
	"strings"
)

var (
	orderService = service.NewOrderService()
)

type OrderController struct {
}

func NewOrderController() *OrderController {
	return &OrderController{}
}

// CallBack 订单支付成功后回调
func (o *OrderController) CallBack(c *gin.Context) {
	//1. 匹配支付渠道
	payChannel := strings.TrimSpace(c.Param("channel"))
	pay, err := payment.Dispatch(payChannel)
	if err != nil {
		c.String(http.StatusOK, "payment not found")
		return
	}
	//2. 回调参数验证签名+验证订单是否支付成功
	orderSn, err := pay.Callback(c)
	if err != nil {
		log.Println("处理订单回调出错:" + err.Error())
		c.String(http.StatusOK, "order callback err")
		return
	}
	if orderSn == service.PriceNotMatchOrderSn || orderSn == service.Relay {
		//不匹配返回成功,避免一直重复回调
		c.String(http.StatusOK, pay.ReplyContent())
		return
	}
	//3. 公共处理支付成功逻辑
	err = orderService.UpdateState(orderSn)
	if err != nil {
		log.Println("处理订单出错:" + err.Error())
		c.String(http.StatusOK, "order handler err")
		return
	}
	//4. 返回响应信息
	c.String(http.StatusOK, pay.ReplyContent())
}
