package router

import (
	"context"
	"github.com/gin-gonic/gin"
	cfg "github.com/ichunt2019/cfg/lib"
	"ichunt_golang/middleware"
	"log"
	"net/http"
	"time"
)

var (
	HttpSrvHandler  *http.Server
	HttpsSrvHandler *http.Server
)



func HttpServerRun() {
	//debug release test 开发使用debug模式
	//fmt.Println(cfg.Instance("proxy").GetString("base.debug_mode"))
	gin.SetMode(cfg.Instance("proxy").GetString("base.debug_mode"))

	r := InitRouter(middleware.RequestLog(),middleware.RecoveryMiddleware())
	HttpSrvHandler = &http.Server{
		Addr:           cfg.Instance("proxy").GetString("http.addr"),
		//Addr:           "192.168.1.234:2002",
		Handler:        r,
		ReadTimeout:    time.Duration(cfg.Instance("proxy").GetInt("http.read_timeout")) * time.Second,
		WriteTimeout:   time.Duration(cfg.Instance("proxy").GetInt("http.write_timeout")) * time.Second,
		MaxHeaderBytes: 1 << uint(cfg.Instance("proxy").GetInt("http.max_header_bytes")),
	}

	if err := HttpSrvHandler.ListenAndServe(); err != nil && err != http.ErrServerClosed {
		log.Fatalf(" [ERROR] http_proxy_run %s err:%v\n", cfg.Instance("proxy").GetString("http.addr"), err)
	}
}



/*
异常退出告警提醒
 */
func HttpServerStop() {
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	if err := HttpSrvHandler.Shutdown(ctx); err != nil {
		log.Printf(" [ERROR] http_proxy_stop err:%v\n", err)
	}
	log.Printf(" [INFO] http_proxy_stop %v stopped\n", cfg.Instance("proxy").GetString("http.addr"))
}