package utils

import (
	"encoding/json"
	"github.com/duke-git/lancet/v2/netutil"
	"github.com/go-resty/resty/v2"
	"go-wechat/config"
	"log"
	"net"
	"strconv"
	"strings"
)

// ClearCallback
// @description: 清理微信HOOK回调
func ClearCallback() {
	res := resty.New()
	resp, err := res.R().
		SetHeader("Content-Type", "application/json;chartset=utf-8").
		Post(config.Conf.Wechat.GetURL("/api/unhookSyncMsg"))
	if err != nil {
		log.Panicf("清理微信HOOK回调失败: %s", err.Error())
	}
	log.Printf("清理微信HOOK回调结果: %s", resp.String())
}

// SetCallback
// @description: 设置微信HOOK回调
// @param host
func SetCallback(userHost string) {
	// 获取本机IP地址
	host := userHost
	if userHost == "auto" {
		host = net.ParseIP(netutil.GetInternalIp()).String()
	}

	port := 19099
	if userHost != "" && userHost != "auto" {
		uh := strings.Split(strings.TrimSpace(userHost), ":")
		host = uh[0]
		if len(uh) == 2 {
			port, _ = strconv.Atoi(uh[1])
		}
	}

	// 组装参数
	param := map[string]any{
		"port":       port, // socket端口
		"ip":         host, // socketIP
		"url":        "",   // http接口地址
		"timeout":    3000, // 超时毫秒数
		"enableHttp": 0,    // 是否使用http接口
	}
	pbs, _ := json.Marshal(param)
	log.Printf("设置微信HOOK回调参数: %s", string(pbs))

	res := resty.New()
	resp, err := res.R().
		SetHeader("Content-Type", "application/json;chartset=utf-8").
		SetBody(string(pbs)).
		Post(config.Conf.Wechat.GetURL("/api/hookSyncMsg"))
	if err != nil {
		log.Panicf("设置微信HOOK回调失败: %s", err.Error())
	}
	log.Printf("设置微信HOOK回调结果: %s", resp.String())
}