using System;
using System.IO;
using System.Runtime.InteropServices;

namespace PatcherUtils.Model
{
    public static class PatchLogger
    {
        private static string LogFilePath = "Patcher.log".FromCwd();
        private static void LogToFile(string message)
        {
            try
            {
                File.AppendAllLines(LogFilePath, new[] { message });
            }
            catch(Exception)
            {
                //TODO - proper logging at some point or whatever idk... -waffle
            }
        }

        private static string GetTimestamp()
        {
            return DateTime.Now.ToString("MM/dd/yyyy - hh:mm:ss tt]");
        }

        public static void LogOSInfo()
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                LogToFile($"{GetTimestamp()}[OS]: Windows");

            if(RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
                LogToFile($"{GetTimestamp()}[OS]: Linux");

            if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
                LogToFile($"{GetTimestamp()}[OS]: OSX");

            if (RuntimeInformation.IsOSPlatform(OSPlatform.FreeBSD))
                LogToFile($"{GetTimestamp()}[OS]: FreeBSD");


            LogToFile($"{GetTimestamp()}[OS]: {RuntimeInformation.OSDescription}");
        }

        public static void LogInfo(string message) => LogToFile($"{GetTimestamp()}[INFO]: {message}");
        public static void LogError(string message) => LogToFile($"{GetTimestamp()}[ERROR]: {message}");
        public static void LogException(Exception ex) => LogToFile($"{GetTimestamp()}[EXCEPTION]: {ex.Message}\n\nStackTrace:\n{ex.StackTrace}");
    }
}
