using System;
using UnityEngine;

namespace MajacloudSdk
{
    public enum MajacloudLogLevel { None, Error, Warning, Info, Verbose }

    /// <summary>SDK logging. Set <see cref="Level"/> or replace <see cref="Handler"/> to route messages elsewhere.</summary>
    public sealed class MajacloudLog
    {
        public MajacloudLogLevel Level { get; set; } = MajacloudLogLevel.Warning;
        public bool LogRequests { get; set; }
        public Action<MajacloudLogLevel, string> Handler { get; set; }

        public void Error(string message) => Write(MajacloudLogLevel.Error, message);
        public void Warning(string message) => Write(MajacloudLogLevel.Warning, message);
        public void Info(string message) => Write(MajacloudLogLevel.Info, message);
        public void Verbose(string message) => Write(MajacloudLogLevel.Verbose, message);

        public void Write(MajacloudLogLevel level, string message)
        {
            if (level == MajacloudLogLevel.None || level > Level) return;
            if (Handler != null)
            {
                Handler(level, message);
                return;
            }
            var text = "[Majacloud] " + message;
            switch (level)
            {
                case MajacloudLogLevel.Error: Debug.LogError(text); break;
                case MajacloudLogLevel.Warning: Debug.LogWarning(text); break;
                default: Debug.Log(text); break;
            }
        }
    }
}
