using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Commission
{
    public partial class Change : Form
    {
        public Change()
        {
            InitializeComponent();
        }

        private void b_back_Click(object sender, EventArgs e)
        {
            Hide();
            Cabinet menu = new Cabinet();
            menu.Show();
            menu.Location = Location;
            DataBase.diagWrite("Переход на форму Личный кабинет");
        }

        /// <summary>
        /// Проверка данных на корректность перед сохранением в БД
        /// </summary>
        /// <param name="check">Проверка пройдена (true) или нет (false)</param>
        private void checkData(ref bool check)
        {
            if (!Regex.IsMatch(oldpass.Text, @"^(?=.*[A-Z])(?=.*[a-z])[0-9A-Za-z]{5,}$"))
            {
                MessageBox.Show("Введите пароль корректно!\nМинимум 5 символов\nМинимум 1 прописная латинская буква\nМинимум 1 заглавная латинская буква", "Смена пароля", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else if (!Regex.IsMatch(newpass.Text, @"^(?=.*[A-Z])(?=.*[a-z])[0-9A-Za-z]{5,}$"))
            {
                MessageBox.Show("Введите пароль корректно!\nМинимум 5 символов\nМинимум 1 прописная латинская буква\nМинимум 1 заглавная латинская буква", "Смена пароля", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                check = true;
            }

            if (check)
            {
                string password;
                SqlDataReader sqlReader = null;
                SqlCommand command = new SqlCommand("SELECT password FROM Logins WHERE Kod_user = @kod", DataBase.connection());
                command.Parameters.AddWithValue("kod", Avtorization.id_user);
                sqlReader = command.ExecuteReader();
                while (sqlReader.Read())
                {
                    password = Convert.ToString(sqlReader["password"]);
                    if (password != oldpass.Text)
                    {
                        check = false;
                        MessageBox.Show("Неверный старый пароль!", "Смена пароля", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        break;
                    }
                }
                sqlReader.Close();
            }
        }

        /// <summary>
        /// Обновление данных в таблицах БД
        /// </summary>
        private void fillTable()
        {
            string password = newpass.Text;
            SqlCommand command = new SqlCommand("UPDATE Logins SET password = @pass WHERE kod_user = @id", DataBase.connection());
            command.Parameters.AddWithValue("pass", password);
            command.Parameters.AddWithValue("id", Avtorization.id_user);
            command.ExecuteNonQuery();
        }

        private void b_save_Click(object sender, EventArgs e)
        {
            bool check = false;
            checkData(ref check);
            if (check)
            {
                fillTable();
                MessageBox.Show("Данные успешно изменены!", "Изменение пароля", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void old_lock_Click(object sender, EventArgs e)
        {
            if (oldpass.UseSystemPasswordChar == true)
            {
                oldpass.UseSystemPasswordChar = false;
            }
            else
            {
                oldpass.UseSystemPasswordChar = true;
            }
        }

        private void b_lock_Click(object sender, EventArgs e)
        {
            if (newpass.UseSystemPasswordChar == true)
            {
                newpass.UseSystemPasswordChar = false;
            }
            else
            {
                newpass.UseSystemPasswordChar = true;
            }
        }

        private void Change_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }
    }
}
