using DeskRedis.Exceptions;
using DeskRedis.Model;
using DeskRedis.Util;
using ServiceStack.Redis;
using System;
using System.Windows;

namespace DeskRedis
{
    /// <summary>
    /// WinSearchKey.xaml 的交互逻辑
    /// </summary>
    public partial class WinSearchKey : Window
    {
        #region 私有变量
        /// <summary>
        /// 配置id
        /// </summary>
        private readonly string configId;

        /// <summary>
        /// 数据库索引
        /// </summary>
        private readonly int dbIndex;
        #endregion


        #region 委托、事件
        public event Action<string> OnError;
        #endregion


        #region 构造方法
        public WinSearchKey()
        {
            this.InitializeComponent();
        }

        /// <summary>
        /// 库索引
        /// </summary>
        /// <param name="configId">redis配置id</param>
        /// <param name="dbIndex">数据库索引</param>
        public WinSearchKey(string configId, int dbIndex = 0)
        {
            this.InitializeComponent();

            this.configId = configId;
            this.dbIndex = dbIndex;
        }
        #endregion


        #region 本地事件
        /// <summary>
        /// 当鼠标点击查询按钮时发生
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnSearch_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                AssertUtil.FormDataValidate("请输入键", () => { return string.IsNullOrEmpty(this.tbKey.Text.Trim()); });
                string key = this.tbKey.Text.Trim();

                RedisValue redisValue = GlobalBusiness.RedisCaches[this.configId].Get(key, this.dbIndex);
                this.tbValue.Text = redisValue.Value;
            }
            catch (IllegalFormDataException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (RedisException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (Exception ex)
            {
                this.OnError?.Invoke(ex.Message);
            }
        }

        /// <summary>
        /// 当鼠标点击关闭按钮时发生
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnClose_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
        #endregion
    }
}