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

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

        private void button2_Click(object sender, EventArgs e)
        {
            Hide();
            Entrant etr = new Entrant();
            etr.Show();
            etr.Location = Location;
            DataBase.diagWrite("Переход на форму Абитуриенты");
        }

        private void Etrants_add_Load(object sender, EventArgs e)
        {

        }

        /// <summary>
        /// Проверка данных на корректность перед сохранением в БД
        /// </summary>
        /// <param name="check">Проверка пройдена (true) или нет (false)</param>
        private void checkData(ref bool check, string birthday)
        {
            int year = DateTime.Now.Year - 14;
            int month = DateTime.Now.Month;
            int day = DateTime.Now.Day;

            try
            {
                if (!Regex.IsMatch(t_surname.Text, @"^[А-Я][а-я]"))
                {
                    MessageBox.Show("Введите фамилию корректно!", "Добавление абитуриента", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (!Regex.IsMatch(t_name.Text, @"^[А-Я][а-я]"))
                {
                    MessageBox.Show("Введите имя корректно!", "Добавление абитуриента", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (!Regex.IsMatch(t_patr.Text, @"^[А-Я][а-я]"))
                {
                    MessageBox.Show("Введите отчество корректно!", "Добавление абитуриента", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (Convert.ToInt32(birthday.Substring(0, 4)) < year - 80 || Convert.ToInt32(birthday.Substring(0, 4)) > year
                    || Convert.ToInt32(birthday.Substring(5, 2)) > 12 || Convert.ToInt32(birthday.Substring(0, 4)) == year && Convert.ToInt32(birthday.Substring(5, 2)) > month
                    || Convert.ToInt32(birthday.Substring(0, 4)) == year && Convert.ToInt32(birthday.Substring(5, 2)) == month && Convert.ToInt32(birthday.Substring(8, 2)) > day)
                {
                    MessageBox.Show("Введите корректную дату рождения!", "Добавление абитуриента", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (!Regex.IsMatch(t_phone.Text, @"^\+7 \(9[0-9]{2}\) [0-9]{3}-[0-9]{2}-[0-9]{2}$"))
                {
                    MessageBox.Show("Введите отчество корректно!", "Добавление абитуриента", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (t_adr.Text == "")
                {
                    MessageBox.Show("Введите адрес корректно!", "Добавление абитуриента", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (!Regex.IsMatch(m_seria.Text, @"^[0-9]{2} [0-9]{2}$"))
                {
                    MessageBox.Show("Введите серию корректно!", "Добавление абитуриента", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (!Regex.IsMatch(m_nom.Text, @"^[0-9]{6}$"))
                {
                    MessageBox.Show("Введите номер корректно!", "Добавление абитуриента", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (d_date.Text == "")
                {
                    MessageBox.Show("Введите корректную дату выдачи паспорта!", "Добавление абитуриента", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (!Regex.IsMatch(m_kod.Text, @"^[0-9]{3}-[0-9]{3}$"))
                {
                    MessageBox.Show("Введите номер подразделения корректно!", "Добавление абитуриента", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (t_ball.Text == "" || Convert.ToDouble(t_ball.Text) <= 0)
                {
                    MessageBox.Show("Введите сумму результатов корректно!", "Добавление абитуриента", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else if (cb_spec.SelectedIndex == -1)
                {
                    MessageBox.Show("Выберите специальность из списка!", "Добавление абитуриента", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    check = true;
                }
        }
            catch
            {
                MessageBox.Show("Возникла ошибка. Проверьте введённые данные!", "Добавление абитуриента", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
}

        /// <summary>
        /// Добавление данных в БД
        /// </summary>
        private void fillTable()
        {
            SqlCommand command = new SqlCommand ($"insert into [Entrant] (Surname, Names, Patronymic, Birthday, Phone, Address, Seria, Nomer, Date_of_issue, Kod_division, Medal, Result_ball, Kod_specialties, Admission) Values (@fam, @name, @otc, @date, @tel, @adr, @seria, @nom, @datee, @kod, @medal, @ball, @spec, @admis)", DataBase.connection());
            command.Parameters.AddWithValue("fam", t_surname.Text);
            command.Parameters.AddWithValue("name", t_name.Text);
            command.Parameters.AddWithValue("otc", t_patr.Text);
            string Date = birthday.Value.ToString("yyyy-MM-dd");
            command.Parameters.AddWithValue("date", $"{Date}");
            command.Parameters.AddWithValue("tel", t_phone.Text);
            command.Parameters.AddWithValue("adr", t_adr.Text);
            command.Parameters.AddWithValue("seria",m_seria.Text);
            command.Parameters.AddWithValue("nom", m_nom.Text);
            string datee = d_date.Value.ToString("yyyy-MM-dd");
            command.Parameters.AddWithValue("datee", $"{datee}");
            command.Parameters.AddWithValue("kod", m_kod.Text);
            command.Parameters.AddWithValue("medal", cb_medal.Checked);
            command.Parameters.AddWithValue("ball", t_ball.Text);
            command.Parameters.AddWithValue("spec", cb_spec.SelectedIndex + 1);
            command.Parameters.AddWithValue("admis", cb_zach.Checked);
            command.ExecuteNonQuery();
   
        }
        private void b_add_Click(object sender, EventArgs e)
        {
            bool check = false;
            checkData(ref check, birthday.Value.ToString("yyyy-MM-dd"));
            if (check)
            {
                fillTable();
                MessageBox.Show("Данные успешно добавлены!", "Добавление абитуриента", MessageBoxButtons.OK, MessageBoxIcon.Information);
                t_surname.Text = "";
                t_name.Text = "";
                t_patr.Text = "";
                birthday.Text = "";
                t_phone.Text = "";
                t_adr.Text = "";
                m_seria.Text = "";
                m_nom.Text = "";
                d_date.Text = "";
                m_kod.Text = "";
                cb_medal.Checked = false;
                t_ball.Text = "";
                cb_zach.Checked = false;
            }
        }

        /// <summary>
        /// Заполнение ComboBox
        /// </summary>
        private void cbFill()
        {
            SqlDataReader sqlReader = null;
            SqlCommand command = new SqlCommand("SELECT * FROM Specialization", DataBase.connection());
            sqlReader = command.ExecuteReader();
            while (sqlReader.Read())
            {
                cb_spec.Items.Add(sqlReader["Specialty"]);
            }
            sqlReader.Close();
        }
        private void m_seria_KeyPress(object sender, KeyPressEventArgs e)
        {
            char number = e.KeyChar;
            if (!Char.IsDigit(number) && number != 8)
            {
                e.Handled = true;
            }
        }
        private void m_nom_KeyPress(object sender, KeyPressEventArgs e)
        {
            char number = e.KeyChar;
            if (!Char.IsDigit(number) && number != 8)
            {
                e.Handled = true;
            }
        }
        private void m_kod_KeyPress(object sender, KeyPressEventArgs e)
        {
            char number = e.KeyChar;
            if (!Char.IsDigit(number) && number != 8)
            {
                e.Handled = true;
            }
        }
        private void t_phone_KeyPress(object sender, KeyPressEventArgs e)
        {
            char number = e.KeyChar;
            if (!Char.IsDigit(number) && number != 8) // цифры
            {
                e.Handled = true;
            }
        }
        private void Etrants_add_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }
    }
}
