; ##############################################################################
;        Logging
; ##############################################################################
#include <Date.au3>

; Konstanten
Global Enum $LOG_ALL, $LOG_DEBUG, $LOG_WARN, $LOG_ERROR, $LOG_FIX
Global Enum $LOG_TARGET_CONSOLE, $LOG_TARGET_TRAYTIP, $LOG_TARGET_MSGBOX, $LOG_TARGET_FILE
; Default
Global $log_level = $LOG_ALL
Global $log_target = $LOG_TARGET_CONSOLE
Global $log_filename = ""
Global $log_enable_timing = True

Func _Log($msg_title, $msg = "", $level = $LOG_ERROR)
	; Log-Level beachten
	If $level < $log_level Then Return
	Local $tCur = _Date_Time_GetLocalTime()

	; Log-Typ beachten
	Switch $log_target
		Case $LOG_TARGET_CONSOLE
			If $log_enable_timing Then
				$msg_title = StringFormat("[%s] %s", _Date_Time_SystemTimeToDateTimeStr($tCur), $msg_title)
			EndIf
			If $msg = "" Then
				ConsoleWrite(StringFormat("%s\n", $msg_title))
			Else
				ConsoleWrite(StringFormat("%s: %s\n", $msg_title, $msg))
			EndIf
		Case $LOG_TARGET_TRAYTIP
			If $log_enable_timing Then
				$msg_title = StringFormat("%s [%s]", $msg_title, _Date_Time_SystemTimeToDateTimeStr($tCur))
			EndIf
			TrayTip($msg_title, $msg, 20)
		Case $LOG_TARGET_MSGBOX
			If $log_enable_timing Then
				$msg_title = StringFormat("%s [%s]", $msg_title, _Date_Time_SystemTimeToDateTimeStr($tCur))
			EndIf
			MsgBox(64 + 4096 + 262144, $msg_title, $msg)
		Case $LOG_TARGET_FILE
			If $log_enable_timing Then
				$msg_title = StringFormat("[%s] %s", _Date_Time_SystemTimeToDateTimeStr($tCur), $msg_title)
			EndIf
			If $log_filename == "" Then
				; Schreibrechte prüfen
				Local $log_file_paths[3] = [@ScriptDir & "\lastrun.log", @UserProfileDir & "\lastrun.log", @TempDir & "\lastrun.log"]
				For $i = 0 To UBound($log_file_paths) - 1
					$log_filename = $log_file_paths[$i]
					If FileWrite($log_filename, "") == 1 Then ExitLoop
				Next
				ConsoleWrite("Schreibe Log nach " & $log_filename & @CRLF)
				FileDelete($log_filename)
			EndIf
			Local $f = FileOpen($log_filename, 1) ; Write mode (append to end of file)
			If $f <> -1 Then
				If $msg = "" Then
					FileWrite($f, StringFormat("%s\n", $msg_title))
				Else
					FileWrite($f, StringFormat("%s: %s\n", $msg_title, $msg))
				EndIf
			EndIf
			FileClose($f)
	EndSwitch
EndFunc   ;==>_Log
