package dataobj

import (
	"crypto/md5"
	"fmt"
	"io"
)

//下发给agent的数据结构
type DetectedItem struct {
	Sid        int64  `json:"sid"`
	Method     string `json:"method"`
	Domain     string `json:"domain"`
	Target     string `json:"target"`
	Keywords   string `json:"keywords"`
	Timeout    int    `json:"timeout"`
	Creator    string `json:"creator"`
	Data       string `json:"data"`
	Endpoint   string `json:"endpoint"`
	Tag        string `json:"tag"`
	ExpectCode string `json:"expect_code"`
	Idc        string `json:"idc"`
	Header     string `json:"header"`
	PostData   string `json:"post_data"`
}

//agent上报的数据结构
type CheckResult struct {
	Sid      int64  `json:"sid"`
	Domain   string `json:"domain"`
	Target   string `json:"target"`
	Creator  string `json:"creator"`
	Endpoint string `json:"endpoint"`
	Tag      string `json:"tag"`
	RespCode string `json:"resp_code"`
	RespTime int    `json:"resp_time"`
	Status   int64  `json:"status"`
	PushTime int64  `json:"push_time"`
	Step     int64  `json:"step"`
}

type ItemStatus struct {
	Id       int64  `json:"id"`
	Sid      int64  `json:"sid"`
	Ip       string `json:"ip"` //agent所在机器的ip
	RespTime int    `json:"resp_time"`
	RespCode string `json:"resp_code"`
	PushTime int64  `json:"push_time"`
	Result   int64  `json:"result"`
}

func (this *ItemStatus) PK() string {
	h := md5.New()
	io.WriteString(h, fmt.Sprintf("%s/%s", this.Sid, this.Ip))

	return fmt.Sprintf("%x", h.Sum(nil))
}

type SendResultReq struct {
	Ip           string
	CheckResults []*CheckResult
}

type GetItemResponse struct {
	Message string
	Data    []*DetectedItem
}
