package internal

import (
	"os"
	"path"
	"strings"
)

type AppLogger struct {
	directory string
	filename  string
	filepath  string
}

func NewAppLogger(directory, filename string) *AppLogger {
	return &AppLogger{
		directory: directory,
		filename:  filename,
		filepath:  path.Join(directory, filename),
	}
}

func (l *AppLogger) Print(message string) {
	os.MkdirAll(l.directory, 0755)
	f, _ := os.OpenFile(l.filepath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
	f.WriteString(message)
	f.Close()
}

func (l *AppLogger) Println(message string) {
	l.Print(message + "\n")
}

func (l *AppLogger) Trace(message string) {
	l.Println("TRACE | " + message)
}

func (l *AppLogger) Debug(message string) {
	if strings.HasPrefix(message, "[ExternalAssetHandler]") {
		return
	}
	l.Println("DEBUG | " + message)
}

func (l *AppLogger) Info(message string) {
	l.Println("INFO  | " + message)
}

func (l *AppLogger) Warning(message string) {
	l.Println("WARN  | " + message)
}

func (l *AppLogger) Error(message string) {
	l.Println("ERROR | " + message)
}

func (l *AppLogger) Fatal(message string) {
	l.Println("FATAL | " + message)
	os.Exit(1)
}
