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

namespace Швейная_фабрика
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }
        public static string IDUser = "0";
        string GetCapcha()
        {
            string TxtLetter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            string TxtDigit = "0123456789";
            string t1 = TxtLetter + TxtDigit;
            string capcha = "";
            bool FlagDigit = false;
            Random rnd = new Random();

            for (int i = 1; i <= 3; i++)
            {
                // взять символ из строки с символами для капчи
                char sim = t1[rnd.Next(t1.Length)];
                // если символ - цифра, запомнить это
                if (char.IsDigit(sim)) FlagDigit = true;
                capcha += sim;  // добавить символ к капче
            }
            if (FlagDigit == false)
                capcha += TxtDigit[rnd.Next(TxtDigit.Length)];
            else
                capcha += TxtLetter[rnd.Next(TxtLetter.Length)];

            return capcha;
        }

        private void BtnLogin_Click(object sender, EventArgs e)
        {
            //if (TbxCapcha.Text.ToUpper() != LblCapcha.Text)
            //{
            //    MessageBox.Show("Символы капчи введены неверно!\nПопробуйте еще раз.");
            //    LblCapcha.Text = GetCapcha();
            //    TbxCapcha.Clear();
            //    return;
            //}

            // роль пользователя (считывается из ComboBox)
            string role = CmbRole.SelectedItem.ToString();
            // фильтр для таблицы Пользователи
            string TxtFilter = string.Format("login = '{0}' and pass = '{1}' and role = '{2}'", TbxLogin.Text, TbxPass.Text, (CmbRole.SelectedIndex +1).ToString());
            // логин для передачи на рабочее место
            string TxtFilterForUser = string.Format("login = '{0}'", TbxLogin.Text);
            BsUsers.Filter = TxtFilter;  // включить фильтр
            

            if (BsUsers.Count == 0)
            {
                MessageBox.Show(String.Format("Нет пользователя '{0}' с указанным логином и паролем!", role));
                return;
            }

            TbxLogin.Clear(); TbxPass.Clear(); // очистить поля
            this.Visible = false;  // скрыть форму для авторизации
            IDUser = LblIdUser.Text;
            if (role == "заказчик")
            {
                // создать форму для заказчика
                FormZakazchik frm = new FormZakazchik();
                // отфильтровать авторизовавшегося пользователя
                frm.BsUsers.Filter = TxtFilterForUser;
                frm.ShowDialog();
            }

            if (role == "менеджер")
            {
                // создать форму для менеджера
                FormManager frm = new FormManager();
                // отфильтровать авторизовавшегося пользователя
                frm.BsUsers.Filter = TxtFilterForUser;
                frm.ShowDialog();
            }

            if (role == "кладовщик")
            {
                // создать форму для кладовщика
                FormKladovschik frm = new FormKladovschik();
                // отфильтровать авторизовавшегося пользователя
                frm.BsUsers.Filter = TxtFilterForUser;
                frm.ShowDialog();
            }

            this.Visible = true;  // показать форму для авторизации
            // загрузить обновленные записи из БД
            this.usersTableAdapter.Fill(this.сlothesFactoryLGDataSet.Users);
            TbxLogin.Focus();
            TbxCapcha.Clear();
            LblCapcha.Text = GetCapcha();
        }


        private void FormMain_Load(object sender, EventArgs e)
        {
            // TODO: данная строка кода позволяет загрузить данные в таблицу "сlothesFactoryLGDataSet.Users". При необходимости она может быть перемещена или удалена.
            this.usersTableAdapter.Fill(this.сlothesFactoryLGDataSet.Users);
            CmbRole.SelectedIndex = 0;

            LblCapcha.Text = GetCapcha();
            LblIdUser.Hide();
        }

        private void CbxShowPass_CheckedChanged(object sender, EventArgs e)
        {
            TbxPass.UseSystemPasswordChar = !TbxPass.UseSystemPasswordChar;
        }

        private void LblCapcha_Paint(object sender, PaintEventArgs e)
        {
            // массив цветов
            Color[] colors = { Color.Green, Color.Black, Color.Yellow, Color.White };
            Random rnd = new Random();
            // изобразить от 5 до 10 линий
            for (int i = 1; i <= rnd.Next(5, 11); i++)
            {
                // координаты начала и конца отрезка
                int x1 = rnd.Next(LblCapcha.Width);
                int y1 = rnd.Next(LblCapcha.Height);
                int x2 = rnd.Next(LblCapcha.Width);
                int y2 = rnd.Next(LblCapcha.Height);
                // случайный цвет из массива цветов
                Color col = colors[rnd.Next(colors.Length)];
                // нарисовать линию на метке Label
                e.Graphics.DrawLine(new Pen(col), x1, y1, x2, y2);
            }
        }

        private void LblReg_Click(object sender, EventArgs e)
        {
            FormReg frm = new FormReg();
            if (frm.ShowDialog() == DialogResult.OK)
                this.usersTableAdapter.Fill(this.сlothesFactoryLGDataSet.Users);
        }
    }
}
