package ui

import (
	"time"

	"github.com/iotaledger/goshimmer/packages/node"
)

var logHistory = make([]*statusMessage, 0)

type statusMessage struct {
	Source  string    `json:"source"`
	Level   int       `json:"level"`
	Message string    `json:"message"`
	Time    time.Time `json:"time"`
}

type resp map[string]interface{}

func storeAndSendStatusMessage(pluginName string, message string, level int) {

	msg := &statusMessage{
		Source:  pluginName,
		Level:   level,
		Message: message,
		Time:    time.Now(),
	}
	logHistory = append(logHistory, msg)
	ws.send(resp{
		"logs": []*statusMessage{msg},
	})
}

var uiLogger = &node.Logger{
	LogInfo: func(pluginName string, message string) {
		storeAndSendStatusMessage(pluginName, message, node.LOG_LEVEL_INFO)
	},
	LogSuccess: func(pluginName string, message string) {
		storeAndSendStatusMessage(pluginName, message, node.LOG_LEVEL_SUCCESS)
	},
	LogWarning: func(pluginName string, message string) {
		storeAndSendStatusMessage(pluginName, message, node.LOG_LEVEL_WARNING)
	},
	LogFailure: func(pluginName string, message string) {
		storeAndSendStatusMessage(pluginName, message, node.LOG_LEVEL_FAILURE)
	},
	LogDebug: func(pluginName string, message string) {
		storeAndSendStatusMessage(pluginName, message, node.LOG_LEVEL_DEBUG)
	},
}