// 网元HLR服务8080端口。
// 融合到UDM网元，也许是UDM的HLR服务。

package fetchlink

import (
	"encoding/json"
	"fmt"
	"strings"

	"be.ems/src/framework/logger"
	"be.ems/src/framework/utils/fetch"
	"be.ems/src/modules/ne/model"
)

// HLRTraceStart HLR跟踪任务开始
//
// data参数 {traceID:"跟踪任务ID", imsi:"IMSI和MSISDN必填一个，都带的话以IMSI为准", msisdn:""}
func HLRTraceStart(neInfo model.NeInfo, data map[string]any) (string, error) {
	// 网元参数配置新增（array）
	neUrl := fmt.Sprintf("http://%s:%d/trace-manage/v1/add-task", neInfo.IP, neInfo.Port)
	resBytes, err := fetch.PostJSON(neUrl, data, nil)
	var resData map[string]string
	if err != nil {
		errStr := err.Error()
		logger.Warnf("HLRTraceStart Post \"%s\"", neUrl)
		logger.Errorf("HLRTraceStart %s", errStr)
		return "", fmt.Errorf("NeService HLR API Error")
	}

	// 序列化结果
	err = json.Unmarshal(resBytes, &resData)
	if err != nil {
		logger.Errorf("HLRTraceStart Unmarshal %s", err.Error())
		return "", err
	}
	if v, ok := resData["code"]; ok && v == "0" {
		return strings.TrimSpace(strings.ToLower(resData["message"])), nil
	}
	return "", fmt.Errorf("%s", resData["message"])
}

// HLRTraceStop HLR跟踪任务停止
//
// data参数 {traceIDArray: ["跟踪任务ID数组"]}
func HLRTraceStop(neInfo model.NeInfo, data map[string]any) (string, error) {
	// 网元参数配置新增（array）
	neUrl := fmt.Sprintf("http://%s:%d/trace-manage/v1/delete-task", neInfo.IP, neInfo.Port)
	resBytes, err := fetch.PostJSON(neUrl, data, nil)
	var resData map[string]string
	if err != nil {
		errStr := err.Error()
		logger.Warnf("HLRTraceStop Post \"%s\"", neUrl)
		logger.Errorf("HLRTraceStop %s", errStr)
		return "", fmt.Errorf("NeService HLR API Error")
	}

	// 序列化结果
	err = json.Unmarshal(resBytes, &resData)
	if err != nil {
		logger.Errorf("HLRTraceStop Unmarshal %s", err.Error())
		return "", err
	}
	if v, ok := resData["code"]; ok && v == "0" {
		return strings.TrimSpace(strings.ToLower(resData["message"])), nil
	}
	return "", fmt.Errorf("%s", resData["message"])
}
