using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DH.Commons.Helper
{
    public static class SchemeHelper
    {
        private const string SchemesKey = "Schemes";
        private const string CurrentSchemeKey = "CurrentScheme";
        private const char Separator = '|';

        /// <summary>
        /// 初始化配置(首次运行时调用)
        /// </summary>
        public static void Initialize()
        {
            // 如果Schemes不存在,创建空键
            if (!SystemConfigHelper.KeyExists(SchemesKey))
            {
                SystemConfigHelper.SetValue(SchemesKey, "");
            }

            // 如果CurrentScheme不存在,创建空键
            if (!SystemConfigHelper.KeyExists(CurrentSchemeKey))
            {
                SystemConfigHelper.SetValue(CurrentSchemeKey, "");
            }
        }

        /// <summary>
        /// 获取所有方案(自动处理空值)
        /// </summary>
        public static List<string> GetAllSchemes()
        {
            var schemeString = SystemConfigHelper.GetValue(SchemesKey, "");
            return string.IsNullOrEmpty(schemeString)
                ? new List<string>()
                : new List<string>(schemeString.Split(Separator));
        }

        /// <summary>
        /// 添加新方案(自动初始化处理)
        /// </summary>
        public static void AddScheme(string schemeName)
        {
            if (string.IsNullOrWhiteSpace(schemeName))
                throw new ArgumentException("方案名称无效");

            var schemes = GetAllSchemes();

            if (schemes.Contains(schemeName))
                throw new InvalidOperationException($"方案 {schemeName} 已存在");

            schemes.Add(schemeName);
            SaveSchemes(schemes);
        }

        /// <summary>
        /// 设置当前方案(空值安全处理)
        /// </summary>
        public static void SetCurrentScheme(string schemeName)
        {
            var schemes = GetAllSchemes();

            if (!schemes.Contains(schemeName))
                throw new KeyNotFoundException($"方案 {schemeName} 不存在");

            SystemConfigHelper.SetValue(CurrentSchemeKey, schemeName);
        }

        /// <summary>
        /// 获取当前方案(默认值处理)
        /// </summary>
        public static string GetCurrentScheme()
        {
            var current = SystemConfigHelper.GetValue(CurrentSchemeKey, "");
            return !string.IsNullOrEmpty(current) ? current : "默认方案";
        }

        private static void SaveSchemes(List<string> schemes)
        {
            var schemeString = schemes.Count > 0
                ? string.Join(Separator.ToString(), schemes)
                : "";
            SystemConfigHelper.SetValue(SchemesKey, schemeString);
        }


        /// <summary>
        /// 删除指定方案(自动同步当前方案状态)
        /// </summary>
        /// <param name="schemeName">要删除的方案名称</param>
        /// <exception cref="ArgumentException">当方案名称为空时抛出</exception>
        /// <exception cref="KeyNotFoundException">当方案不存在时抛出</exception>
        public static void DeleteScheme(string schemeName)
        {
            if (string.IsNullOrWhiteSpace(schemeName))
                throw new ArgumentException("方案名称无效");

            var schemes = GetAllSchemes();

            if (!schemes.Contains(schemeName))
                throw new KeyNotFoundException($"方案 {schemeName} 不存在");

            // 删除前检查是否是当前方案
            bool isCurrent = GetCurrentScheme() == schemeName;

            // 执行删除操作
            schemes.Remove(schemeName);
            SaveSchemes(schemes);
           
        }
    }
}