using CyberX8_Core;
using MECF.Framework.Common.ControlDataContext;
using MECF.Framework.Common.DataCenter;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using WPF.Themes.UserControls;
using GlobalEvents = CyberX8_MainPages.Unity.GlobalEvents;
namespace CyberX8_MainPages.Views
{
    /// 
    /// UserItemView.xaml 的交互逻辑
    /// 
    public partial class UserItemView :Window
    {
        #region 内部变量
        private UserItem _selectedUser;
        #endregion
        public UserItemView(UserItem selectedUser = null)
        {
            InitializeComponent();
            if (selectedUser != null) _selectedUser = selectedUser;
        }
        /// 
        /// 窗口加载事件
        /// 
        /// 
        /// 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            if (_selectedUser != null)
            {
                textBoxName.Text = _selectedUser.Name;
                textBoxName.IsEnabled = false;
                textBoxPassword.Text = _selectedUser.Password;
                textBoxPassword.IsEnabled = false;
                textBoxNotes.Text = _selectedUser.Notes;
                textBoxConfirePassword.Text = _selectedUser.Password;
                textBoxConfirePassword.IsEnabled = false;
                comBoboxRole.SelectedIndex = (int)Enum.Parse(typeof(Role), _selectedUser.Role);
                button2.Visibility = Visibility.Visible;
                button1.Visibility = Visibility.Collapsed;
                self.Title = "Edit User";
            }
            else
            {
                button1.Visibility = Visibility.Visible;
                button2.Visibility = Visibility.Collapsed;
            }
            name_img.Visibility = Visibility.Collapsed;
            cpwd_img.Visibility = Visibility.Collapsed;
            pwd_img.Visibility = Visibility.Collapsed;
        }
        /// 
        /// 创建按钮
        /// 
        /// 
        /// 
        private async void CreateButton_Click(object sender, RoutedEventArgs e)
        {
            PwdBox_LostFocus(null, null);
            PwdBoxConfirm_LostFocus(null, null);
            UserNameBox_LostFocus(null, null);
            if (!string.IsNullOrEmpty(pwd1.Text) || !string.IsNullOrEmpty(pwd2.Text) || !string.IsNullOrEmpty(username.Text))
            {
                WPFMessageBox.ShowError("Please enter the correct user information!");
                return;
            }
                       
            var users = new ObservableCollection(QueryDataClient.Instance.Service.QueryAllUsers());
            if (users.Where(x => x.Name == textBoxName.Text).FirstOrDefault() != null)
            {
                WPFMessageBox.ShowError("User Name exists");
                return;
            }
            QueryDataClient.Instance.Service.InserUser(new UserItem() { Name = textBoxName.Text, Password = textBoxConfirePassword.Password, Role = (comBoboxRole.SelectedItem as ComboBoxItem).Content.ToString(), Notes = textBoxNotes.Text });
            await Task.Delay(500);
            GlobalEvents.Instance.OnUserViewUpdateEvent();
            this.Close();
        }
        /// 
        /// Edit保存
        /// 
        /// 
        /// 
        private async void SaveButton_Click(object sender, RoutedEventArgs e)
        {
            QueryDataClient.Instance.Service.EditUser(new UserItem() { Name = _selectedUser.Name, Password = _selectedUser.Password, Role = (comBoboxRole.SelectedItem as ComboBoxItem).Content.ToString(), Notes = textBoxNotes.Text });
            await Task.Delay(500);
            GlobalEvents.Instance.OnUserViewUpdateEvent();
            this.Close();
        }
        /// 
        /// 密码输入格式提示
        /// 
        /// 
        /// 
        private void PwdBox_LostFocus(object sender, RoutedEventArgs e)
        {
            Regex regex = new Regex(@"^[a-zA-Z0-9_]{6,16}$");//6~16位字符
            if (!regex.IsMatch(textBoxPassword.Password))
            {
                pwd1.Text = "Please enter a password of 6 ~ 16 characters, including letters, numbers, or underline!";
                pwd_img.Visibility = Visibility.Visible;
            }
            else
            {
                pwd1.Text = "";
                pwd_img.Visibility = Visibility.Collapsed;
            }
        }
        /// 
        /// 二次密码确认提示
        /// 
        /// 
        /// 
        private void PwdBoxConfirm_LostFocus(object sender, RoutedEventArgs e)
        {
            if (textBoxConfirePassword.Password != textBoxPassword.Password)
            {
                pwd2.Text = "The password is not same!";
                cpwd_img.Visibility = Visibility.Visible;
            }
            else
            {
                pwd2.Text = "";
                cpwd_img.Visibility = Visibility.Collapsed;
            }
        }
        /// 
        /// 用户名输入提示
        /// 
        /// 
        /// 
        private void UserNameBox_LostFocus(object sender, RoutedEventArgs e)
        {
            if (textBoxName.Text == "")
            {
                username.Text = "User name can not be empty!";
                name_img.Visibility = Visibility.Visible;
            }
            else
            {
                username.Text = "";
                name_img.Visibility = Visibility.Collapsed;
            }
        }
    }
}