using OWML.Common;
using System.Diagnostics;
using System.Linq;

namespace QSB.Utility
{
	public static class DebugLog
	{
		public static void ToConsole(string message, MessageType type = MessageType.Message)
			=> QSBCore.Helper.Console.WriteLine(message, type, GetCallingType(new StackTrace()));

		public static void ToHud(string message)
		{
			if (Locator.GetPlayerBody() == null)
			{
				return;
			}

			var data = new NotificationData(NotificationTarget.Player, message.ToUpper());
			NotificationManager.SharedInstance.PostNotification(data);
		}

		public static void ToAll(string message, MessageType type = MessageType.Message)
		{
			ToConsole(message, type);
			ToHud(message);
		}

		public static void DebugWrite(string message, MessageType type = MessageType.Message)
		{
			if (QSBCore.DebugMode)
			{
				ToConsole(message, type);
			}
		}

		private static string GetCallingType(StackTrace frame)
		{
			var stackFrame = frame.GetFrames().First(x => x.GetMethod().DeclaringType.Name != "DebugLog");
			return stackFrame.GetMethod().DeclaringType.Name;
		}
	}
}