package gologger

import (
	"fmt"
	"strings"
)

const (
	ErrorTemplate = "\033[1;31m%s\033[0m\n"
	WarnTemplate  = "\033[1;33m%s\033[0m\n"
	InfoTemplate  = "\033[1;32m%s\033[0m\n"
	DebugTemplate = "\033[1;34m%s\033[0m\n"
	TraceTemplate = "\033[1;35m%s\033[0m\n"
)

type ConsoleAppender struct {
}

func (c *ConsoleAppender) GetName() string {
	return "console"
}

func (c *ConsoleAppender) Append(logEvent LogEvent) {
	data := []interface{}{
		logEvent.Ts.Format("2006-01-02 15:04:05"),
		" ",
	}
	dmsg := fmt.Sprint(logEvent.Data)
	dmsg = strings.TrimLeft(dmsg, "[")
	dmsg = strings.TrimRight(dmsg, "]")
	data = append(data, "["+logEvent.Category+"] ")

	data = append(data, dmsg)
	logMsg := fmt.Sprint(data...)
	switch logEvent.Level {
	case Error:
		fmt.Printf(ErrorTemplate, logMsg)
	case Warn:
		fmt.Printf(WarnTemplate, logMsg)
	case Info:
		fmt.Printf(InfoTemplate, logMsg)
	case Debug:
		fmt.Printf(DebugTemplate, logMsg)
	case Trace:
		fmt.Printf(TraceTemplate, logMsg)
	}
}
func makeConsoleAppender(appenderConfig LogAppenderConfig) LoggerAppender {
	var appender LoggerAppender = &ConsoleAppender{}
	return appender
}
func init() {
	RegistAppender("console", makeConsoleAppender)
}
