package http_protocol_crawler

import (
	"encoding/json"
	config "git.loafle.net/overflow/overflow_probe/agent_api/config_manager"
	"git.loafle.net/overflow/overflow_probe/crawler"
	"git.loafle.net/overflow/overflow_probe/matcher/http"
)

type HTTPHealthCrawler struct {
	crawler.SocketHeahthCrawler
}

func (r *HTTPHealthCrawler) Internal(params config.Config) ([]byte, error) {

	b, err := r.CheckHeahth(params)
	if err != nil {
		return nil, err
	}
	return json.Marshal(b)
}
func NewHTTPHealthCrawler() *HTTPHealthCrawler {
	r := &HTTPHealthCrawler{}
	r.SetInternal(r)
	r.SetMatcher(http.NewHTTPMatcher())
	return r
}

//package main
//
//import (
//	"git.loafle.net/overflow/of_rpc/models/param"
//	"log"
//	"git.loafle.net/overflow/of_rpc/models/protocol"
//	rpc "git.loafle.net/overflow/of_rpc/json"
//	"encoding/json"
//	"strconv"
//	"net"
//	"git.loafle.net/overflow/collector/core/scan/service/matcher/http"
//	"git.loafle.net/overflow/collector/core/scan/service/matcher/packet"
//	"git.loafle.net/overflow/collector/discovery/types/timestamp"
//)
//
//type HttpProtocol struct {
//
//}
//
//func (h *HttpProtocol) Get(input *param.Input, output *param.Output) error {
//
//	log.Println("data : " + string(input.Data))
//	pr := &protocol.HealthRequest{}
//	json.Unmarshal(input.Data, &pr)
//
//	output.StartDate = timestamp.Now()
//	match, err := check(input.Ip, input.Port)
//
//	if err != nil {
//		log.Println(err.Error())
//		return err
//	}
//	output.EndDate = timestamp.Now()
//
//	rres := &protocol.HealthResponse{IsMatch:match}
//
//	b, err := json.Marshal(&rres)
//
//	if err != nil {
//		log.Println(err.Error())
//		return err
//	}
//
//	*output = param.Output{Data:b}
//
//	return nil
//}
//
//func check(ip string, port uint16) (bool,error) {
//
//	var targetHost string = ip
//	targetHost += ":"
//	targetHost += strconv.Itoa(int(port))
//
//	conn, err := net.Dial("tcp", targetHost)
//
//
//	if err != nil {
//		return false, err
//	}
//	defer conn.Close()
//	hp := http.NewHTTPMatcher()
//
//	for i := 0; i < hp.PacketCount(); i++ {
//		pack := hp.Packet(i)
//		conn.Write(pack.Buffer)
//
//		bytes := make([]byte, 1024)
//		l, _ := conn.Read(bytes)
//
//		p := packet.NewPacket(bytes, l)
//
//		if hp.Match(i, p, nil) == false{
//			return false, nil
//		}
//	}
//
//	return true, nil
//}
//
//func start() {
//
//	rpc.SetDelegate(new(HttpProtocol))
//	err := rpc.StartJSONRPC()
//	if err != nil {
//		log.Fatal(err)
//	}
//}
//
//func main() {
//	start()
//}
