package mmlclient

import (
	"fmt"
	"strings"
)

// 发送MML原始消息
// ip 网元IP地址
// msg 指令
func MMLSendMsg(ip, msg string) (string, error) {
	// 创建MMLClient实例
	client, err := NewMMLClient(ip)
	if err != nil {
		return "", fmt.Errorf("failed to create MMLClient instance: %v", err)
	}
	defer client.Close()

	// 发送数据
	err = client.Send(msg)
	if err != nil {
		return "", fmt.Errorf("sending data failed: %v", err)
	}

	// 接收数据
	data, err := client.Receive()
	if err != nil {
		return "", fmt.Errorf("failed to receive data: %v", err)
	}

	return data, nil
}

// 发送MML
// ip 网元IP地址
// msg 指令
func MMLSendMsgToString(ip, msg string) (string, error) {
	// 发送获取数据
	str, err := MMLSendMsg(ip, msg)
	if err != nil {
		return "", err
	}

	str = strings.ToLower(str)

	// 截断
	index := strings.Index(str, "\n")
	if index != -1 {
		str = str[:index]
	}

	// 命令成功
	if strings.Contains(str, "ok") || strings.Contains(str, "success") {
		return str, nil
	}

	return "", fmt.Errorf(str)
}

// 发送MML
// ip 网元IP地址
// msg 指令
func MMLSendMsgToMap(ip, msg string) (map[string]string, error) {
	// 发送获取数据
	str, err := MMLSendMsg(ip, msg)
	if err != nil {
		return nil, err
	}

	// 无数据
	if strings.HasPrefix(str, "No Auth Data") {
		return nil, fmt.Errorf("no auth data")
	}

	// 初始化一个map用于存储拆分后的键值对
	m := make(map[string]string)

	var items []string
	if strings.Contains(str, "\r\n") {
		// 按照分隔符"\r\n"进行拆分
		items = strings.Split(str, "\r\n")
	} else if strings.Contains(str, "\n") {
		// 按照分隔符"\n"进行拆分
		items = strings.Split(str, "\n")
	}

	// 遍历拆分后的结果
	for _, item := range items {
		var pair []string

		if strings.Contains(item, "=") {
			// 按照分隔符"="进行拆分键值对
			pair = strings.SplitN(item, "=", 2)
		} else if strings.Contains(item, ":") {
			// 按照分隔符":"进行拆分键值对
			pair = strings.SplitN(item, ":", 2)
		}

		if len(pair) == 2 {
			// 将键值对存入map中
			m[pair[0]] = pair[1]
		}
	}
	return m, err
}
