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;
using DLLPass;
namespace СУБД_Швейная_фабрика
{
    public partial class FormAuthorization : Form
    {
        public FormAuthorization()
        {
            InitializeComponent();
        }
        // public static string TxtCon = @"Data Source=213.155.192.79,3002;Initial Catalog=fab2021;Persist Security Info=True;User ID=fab2021;Password=fab2021";
        /// 
        /// Генерация капчи из 4-х символов
        /// 
        /// Возвращает сгенерированную капчу
        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 FormAuthorization_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'fab2021DataSet1.Users' table. You can move, or remove it, as needed.
            this.usersTableAdapter.Fill(this.fab2021DataSet1.Users);
            CmbRole.SelectedIndex = 0;
            LblCapcha.Text = GetCapcha();
        }
        /// 
        /// Авторизация пользователя
        /// 
        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, role);
            // логин для передачи на рабочее место
            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;  // скрыть форму для авторизации
            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.fab2021DataSet1.Users);
            TbxLogin.Focus();
            TbxCapcha.Clear();
            LblCapcha.Text = GetCapcha();
        }
        /// 
        /// Скрыть/показать пароль
        /// 
        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.fab2021DataSet1.Users);
        }
    }
}