using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace XiaoZhiSharp.Utils
{
    public class CapsLockChecker
    {
        public static bool IsCapsLockOn()
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                return IsCapsLockOnWindows();
            }
            else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
            {
                return IsCapsLockOnLinux();
            }
            else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
            {
                return IsCapsLockOnMacOS();
            }
            else
            {
                throw new PlatformNotSupportedException("Unsupported operating system");
            }
        }

        // Windows 实现
        private static bool IsCapsLockOnWindows()
        {
            return Console.CapsLock;

        }

        // Linux 实现
        private static bool IsCapsLockOnLinux()
        {
            try
            {
                // 使用 xset 命令查询键盘状态
                var process = new Process
                {
                    StartInfo = new ProcessStartInfo
                    {
                        FileName = "xset",
                        Arguments = "q",
                        RedirectStandardOutput = true,
                        UseShellExecute = false,
                        CreateNoWindow = true,
                    }
                };

                process.Start();
                string output = process.StandardOutput.ReadToEnd();
                process.WaitForExit();

                // 解析输出，查找 Caps Lock 状态
                return output.Contains("Caps Lock:   on");
            }
            catch
            {
                // 如果 xset 不可用，尝试其他方法
                return false;
            }
        }

        // macOS 实现
        private static bool IsCapsLockOnMacOS()
        {
            try
            {
                // 使用 defaults 命令读取键盘设置
                var process = new Process
                {
                    StartInfo = new ProcessStartInfo
                    {
                        FileName = "defaults",
                        Arguments = "read -g AppleKeyboardUIMode",
                        RedirectStandardOutput = true,
                        UseShellExecute = false,
                        CreateNoWindow = true,
                    }
                };

                process.Start();
                string output = process.StandardOutput.ReadToEnd();
                process.WaitForExit();

                // 如果返回值为 1 或 3，表示 Caps Lock 已启用
                if (int.TryParse(output.Trim(), out int result))
                {
                    return result == 1 || result == 3;
                }

                return false;
            }
            catch
            {
                return false;
            }
        }
    }
}
