package main

import (
	"../serverImpl"
	"fmt"
	"git.wanpinghui.com/WPH/go_common/wph"
	"git.wanpinghui.com/WPH/go_common/wph/logger"
	"github.com/gin-gonic/gin"
	"github.com/sirupsen/logrus"
	"net/http"
	"net/url"
)

// Istio测试用,HTTP边界服务,同时也是后端服务的客户端

var log2 *logger.Logger

func main() {
	log2 = logger.New()
	log2.Level = logrus.WarnLevel

	router := gin.New()

	// 添加 GIN 请求处理中间件
	//router.Use(
	//	gzip.Gzip(gzip.DefaultCompression),
	//	mw.Favicon("./static/favicon.ico"), // 请求图标时返回favicon.ico
	//	mw.AddCrossOriginHeaders(),         // 添加跨域头
	//	mw.HandleOptionsMethod(),           // Options和Head请求处理
	//)
	// 设置404、405响应
	router.NoMethod(func(c *gin.Context) {
		resp := wph.E(http.StatusMethodNotAllowed, "Method Not Allowed", nil)
		resp.HttpStatus = http.StatusMethodNotAllowed
		c.JSON(http.StatusBadRequest, wph.E(400, "Method Not Allowed", resp))
		return
	})
	router.NoRoute(func(c *gin.Context) {
		resp := wph.E(http.StatusMethodNotAllowed, "Endpoint Not Found", nil)
		resp.HttpStatus = http.StatusMethodNotAllowed
		c.JSON(http.StatusBadRequest, wph.E(400, "Endpoint Not Found", resp))
		return
	})

	// 注册路由
	router.GET("/test", testV2)

	// 开始监听HTTP请求
	httpServer := &http.Server{Addr: ":8080", Handler: router}
	go func(httpServer *http.Server) {
		log2.Info("Start http server")
		if err := httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
			log2.Error("http server failed to listen and serve", err.Error())
		}
	}(httpServer)
	serverImpl.SignalHandler(httpServer)
}

func testV2(ctxt *gin.Context) {
	input, _ := ctxt.GetQuery("in")
	uri := fmt.Sprintf("http://http-backend:8080/backend?in=%s", url.QueryEscape(fmt.Sprintf("Hello %s", input)))
	resp, err := wph.JSONRequest().Call(http.MethodGet, uri, nil)
	if nil != err {
		log2.Error("call http backend failed", err.Error())
		ctxt.JSON(http.StatusBadRequest, wph.E(400, err.Error(), err.Error()))
		return
	}
	ctxt.String(http.StatusOK, string(resp))
}