package util

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
	"pji_desktop_http/common/config/c_pji"
	"sync"
)

func ContainsKey(m *sync.Map, key string) bool {
	_, found := m.Load(key)
	return found
}

// 根据id获取解析后的地图文件列表
func GetExactedMapFileById(id string) (fileList []string, err error) {
	url := c_pji.SenceOssDownUrl + id

	// 构建请求
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		fmt.Println("Error creating request:", err)
		return nil, err
	}

	// 添加认证头
	req.Header.Set("Authorization", c_pji.Token)

	// 发送请求
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error executing request:", err)
		return nil, err
	}

	defer resp.Body.Close()
	body, _ := ioutil.ReadAll(resp.Body)

	// Json转换为map
	var data map[string]interface{}
	err = json.Unmarshal(body, &data)

	// 提取响应体中的data字段
	dataField, ok := data["data"].([]interface{})
	if !ok {
		fmt.Println("Error extracting data field")
		return nil, err
	}

	// 转换字符串切片
	for _, item := range dataField {
		str, ok := item.(string)
		if !ok {
			fmt.Println("Error converting item to string")
			return nil, err
		}
		fileList = append(fileList, str)
	}

	return fileList, nil
}

// 根据id获取对应的原始bag文件
func GetRosFileById(id string) (file string, err error) {
	url := c_pji.SenceInfoUrl + id

	// 构建请求
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		fmt.Println("Error creating request:", err)
		return "", err
	}

	// 添加认证头
	req.Header.Set("Authorization", c_pji.Token)

	// 发送请求
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error executing request:", err)
		return "", err
	}

	defer resp.Body.Close()
	body, _ := ioutil.ReadAll(resp.Body)

	// Json转换为map
	var data map[string]interface{}
	err = json.Unmarshal(body, &data)

	//fmt.Println("data:", data)
	// 提取响应体中的data字段
	dataField, ok := data["data"].(map[string]interface{})
	if !ok {
		fmt.Println("Error extracting data field")
		return "", err
	}
	// 从 data字段中提取 rosField
	rosField, ok := dataField["rosFileId"].(string)
	if !ok {
		fmt.Println("ID not found or not a string")
		return
	}
	if !ok {
		fmt.Println("Error extracting rosFileId field")
		return "", err
	}
	//println("rosFileId:", rosField)

	return rosField, nil
}