package service

import (
	"boss/internal/common"
	"boss/internal/datas"
	"boss/internal/models/notify"
	"boss/internal/models/order"
	"fmt"
	"github.com/beego/beego/v2/client/httplib"
	"github.com/beego/beego/v2/core/logs"
	"strings"
)

type SendNotifyMerchantService struct {
}

func (c *SendNotifyMerchantService) SendNotifyToMerchant(bankOrderId string) *datas.KeyDataJSON {
	keyDataJSON := new(datas.KeyDataJSON)
	keyDataJSON.Code = -1
	orderInfo := order.GetOrderByBankOrderId(bankOrderId)
	if orderInfo.Status == common.OrderStatusWait {
		keyDataJSON.Msg = "该订单不是成功状态，不能回调"
	} else {
		notifyInfo := notify.GetNotifyInfoByBankOrderId(bankOrderId)
		notifyUrl := notifyInfo.Url
		logs.Info(fmt.Sprintf("boss管理后台手动触发订单回调，url=%s", notifyUrl))
		req := httplib.Post(notifyUrl)
		response, err := req.String()
		if err != nil {
			logs.Error("回调发送失败，fail：", err)
			keyDataJSON.Msg = fmt.Sprintf("该订单回调发送失败，订单回调，fail：%s", err)
		} else {
			if !strings.Contains(strings.ToLower(response), "success") {
				keyDataJSON.Msg = fmt.Sprintf("该订单回调发送成功，但是未返回success字段， 商户返回内容=%s",
					response)
			} else {
				keyDataJSON.Code = 200
				keyDataJSON.Msg = fmt.Sprintf("该订单回调发送成功")
			}
		}
	}
	return keyDataJSON
}

func (c *SendNotifyMerchantService) SelfSendNotify(bankOrderId string) *datas.KeyDataJSON {
	notifyInfo := notify.GetNotifyInfoByBankOrderId(bankOrderId)

	keyDataJSON := new(datas.KeyDataJSON)
	keyDataJSON.Code = 200

	req := httplib.Post(notifyInfo.Url)

	response, err := req.String()
	if err != nil {
		keyDataJSON.Msg = fmt.Sprintf("订单 bankOrderId=%s，已经发送回调出错：%s", bankOrderId, err)
	} else {
		keyDataJSON.Msg = fmt.Sprintf("订单 bankOrderId=%s，已经发送回调，商户返回内容：%s",
			bankOrderId, response)
	}
	return keyDataJSON
}
