package edge_service

import (
	"encoding/json"
	"io/ioutil"
	"iot_manager_service/config"
	"net/http"
	"strings"
)

// ForLightEnergy 获取设备能耗数据
type ForLightEnergy struct{}

// ForLightEnergyReq 请求参数
type ForLightEnergyReq struct {
	Codes []string `json:"codes"` //设备sn列表
	Start string   `json:"start"`
	End   string   `json:"end"`
	Flag  int      `json:"flag"` //1按日 2按月
}

// ForLightEnergyRes 返回数据
type ForLightEnergyRes struct {
	Code int                             `json:"code"`
	Msg  string                          `json:"msg"`
	Data map[string][]ForLightEnergyData `json:"data"`
}
type ForLightEnergyData struct {
	Date       string  `json:"date"`       //日期
	Beginning  float64 `json:"beginning"`  //开始
	Ending     float64 `json:"ending"`     //结束
	Difference float64 `json:"difference"` //能耗
}

func (r *ForLightEnergy) GetLightEnergy(reqPostData ForLightEnergyReq) (map[string][]ForLightEnergyData, error) {
	cfg := config.Instance()
	api := cfg.Foreign.IotEdgeUrl + "/data/v1/energy"
	method := "POST"
	client := &http.Client{}
	marshal, _ := json.Marshal(reqPostData)
	req, err := http.NewRequest(method, api, strings.NewReader(string(marshal)))

	if err != nil {
		return nil, err
	}
	res, err := client.Do(req)
	if err != nil {
		return nil, err
	}
	defer res.Body.Close()
	body, err := ioutil.ReadAll(res.Body)
	if err != nil {
		return nil, err
	}
	//fmt.Printf("body = %v", string(body))
	result := ForLightEnergyRes{}
	err = json.Unmarshal(body, &result)
	if err != nil {
		return nil, err
	}
	if result.Code != 0 {
		panic(result.Msg)
	}
	//fmt.Printf("result.Data = %v", result.Data)
	return result.Data, nil
}
