package app

import (
	"duoduo/conf"
	"duoduo/tools"
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/olivere/elastic/v7"
	"github.com/sirupsen/logrus"
	"gopkg.in/sohlich/elogrus.v7"
	"log"
)

var logs *logrus.Logger

func InitLogElk() {
	fmt.Println("InitLogElk")
	//加载配置
	confIni, errConf := conf.ConnIni()
	if errConf != nil {

		fmt.Println(errConf)
	}

	url := confIni.MustValue("elk", "url")
	host := confIni.MustValue("elk", "host")
	index := confIni.MustValue("elk", "index")

	logs = logrus.New()
	fmt.Println("url = ", url)
	client, err := elastic.NewSimpleClient(elastic.SetURL(url))
	if err != nil {
		fmt.Println("err = ", err.Error())
		log.Panic(err)
	}
	hook, err := elogrus.NewAsyncElasticHook(client, host, logrus.InfoLevel, index)
	if err != nil {
		fmt.Println("err = ", err.Error())
		log.Panic(err)
	}
	logs.Hooks.Add(hook)
	logs.WithFields(logrus.Fields{
		"name": "joe",
		"age":  42,
	}).Error("elk start!")

}

func GetLog() *logrus.Logger {
	if logs == nil {
		return logrus.New()
	}
	return logs
}

func ElkError(msg interface{}) {
	//log.Error(msg)
}

func ELKLogs(c *gin.Context, json string) {

	logs.WithFields(logrus.Fields{
		"Url":    c.Request.RequestURI,
		"Status": c.Writer.Status(),
		"Method": c.Request.Method,
	}).Infof("请求参数:%s", json)

}

func OrderELKLogs(url string, method string, orderId string, json interface{}) {
	jsonStr, err := tools.JsonMarshal(json)
	if err != nil {
		logs.WithFields(logrus.Fields{
			"Url":     url,
			"Method":  method,
			"OrderId": orderId,
		}).Error("错误说明:结构体转json失败 %s", err.Error())
		return
	}

	logs.WithFields(logrus.Fields{
		"Url":     url,
		"Method":  method,
		"OrderId": orderId,
	}).Infof("请求参数:%s", jsonStr)

}

func FromDataELKLogs(url string, method string, orderId string, data string) {

	logs.WithFields(logrus.Fields{
		"Url":     url,
		"Method":  method,
		"OrderId": orderId,
	}).Infof("请求参数:%s", data)

}

func OrderOutDataELKLogs(url string, method string, orderId string, json interface{}) {
	jsonStr, err := tools.JsonMarshal(json)
	if err != nil {
		logs.WithFields(logrus.Fields{
			"Url":     url,
			"Method":  method,
			"OrderId": orderId,
		}).Error("返回错误说明:结构体转json失败 %s", err.Error())
		return
	}

	logs.WithFields(logrus.Fields{
		"Url":     url,
		"Method":  method,
		"OrderId": orderId,
	}).Infof("返回参数:%s", jsonStr)

}

func TispELKLogs(url string, method string, json string) {
	logs.WithFields(logrus.Fields{
		"Url":    url,
		"Method": method,
	}).Infof("请求参数:%s", json)
}

func TispELKOutDataLogs(url string, method string, json string) {
	logs.WithFields(logrus.Fields{
		"Url":    url,
		"Method": method,
	}).Infof("返回参数:%s", json)
}

func TispELKOutDataErrorLogs(url string, method string, json string) {
	logs.WithFields(logrus.Fields{
		"Url":    url,
		"Method": method,
	}).Error("错误说明:%s", json)
}