using Microsoft.Win32;

namespace SparkClient.Model.Helper;

public static class RegistryHelper
{
    private const string BaseRegistryKey = @"SOFTWARE\Dayu\Spark";
    /// <summary>
        /// 向注册表写入字符串类型值
        /// </summary>
        /// <param name="keyName">存储的键名</param>
        /// <param name="value">要写入的字符串值</param>
        public static void WriteString(string keyName, string value)
        {
            using (var key = Registry.CurrentUser.CreateSubKey(BaseRegistryKey))
            {
                key?.SetValue(keyName, value, RegistryValueKind.String);
            }
        }

        /// <summary>
        /// 从注册表读取字符串类型值
        /// </summary>
        /// <param name="keyName">存储的键名</param>
        /// <returns>读取到的字符串值,若不存在则返回 null</returns>
        public static string ReadString(string keyName)
        {
            using (var key = Registry.CurrentUser.OpenSubKey(BaseRegistryKey))
            {
                if (key == null) return null;
                return key.GetValue(keyName) as string;
            }
        }

        /// <summary>
        /// 向注册表写入布尔类型值(以 0/1 方式)
        /// </summary>
        public static void WriteBool(string keyName, bool value)
        {
            using (var key = Registry.CurrentUser.CreateSubKey(BaseRegistryKey))
            {
                key?.SetValue(keyName, value ? 1 : 0, RegistryValueKind.DWord);
            }
        }

        /// <summary>
        /// 从注册表读取布尔类型值(从 0/1 转换)
        /// </summary>
        public static bool ReadBool(string keyName, bool defaultValue = false)
        {
            using (var key = Registry.CurrentUser.OpenSubKey(BaseRegistryKey))
            {
                if (key == null) return defaultValue;
                object regValue = key.GetValue(keyName);
                if (regValue == null) return defaultValue;

                int intVal;
                if (int.TryParse(regValue.ToString(), out intVal))
                {
                    return intVal != 0; // 1->true, 0->false
                }
                return defaultValue;
            }
        }

        /// <summary>
        /// 删除某个键值
        /// </summary>
        /// <param name="keyName">要删除的键名</param>
        public static void DeleteKey(string keyName)
        {
            using (var key = Registry.CurrentUser.OpenSubKey(BaseRegistryKey, writable: true))
            {
                if (key != null)
                {
                    key.DeleteValue(keyName, throwOnMissingValue: false);
                }
            }
        }
    
}