using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FMessegeBox;
using System.Globalization;
using System.IO;
using System.IO.Ports;
using System.Threading;
using System.Data.SqlClient;

namespace WindowsFormsApplication8
{
    public partial class frmSetting : Form
    {
        //textbox برای چک کردن تغیر کردن
        bool ChPass = false;  
        bool ChDatabase = false;
        bool ChModem = false;
        bool chEmail = false;
        //
        private PictureBox LDG;

        public frmSetting()
        {
            InitializeComponent();
            //
            LDG = new PictureBox();
            LDG.Size = panel1.Size;
            LDG.Location = panel1.Location;
            LDG.Visible = false;
            this.Controls.Add(LDG);
            
        }
        
        private void frmSetting_Load(object sender, EventArgs e)
        {
            MaximizeBox = false;
            MinimizeBox = false;

            ShowMask("... در حال بارگزاری اطلاعات");

            InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new CultureInfo("en-US"));

            chkboxBackup.Checked = ClsSetting.Backup_A;

            ConnectionInfo info = new ConnectionInfo();
            info.ConnectFile();

            txtDataSource.Text = info.DataSource;
            txtInitialCatalog.Text = info.InitialCatalog;
            txtUserId.Text = info.UserId;
            txtPasswordDataBase.Text = info.Password;
            ChDatabase = false;

            txtEmailUsername.Text = ClsSetting.EmailUserid;
            txtMailPassword.Text = ClsSetting.EmailPassword;
            txtEmailDisplayname.Text = ClsSetting.EmailDisplayname;
            chEmail = false;

            if (ClsSetting.CheckDB(info.DataSource, info.UserId, info.Password))
            {
                btnAtach.Enabled = false;           
            }
            else
            {
                btnRestore.Enabled = false;
                btnBackup.Enabled = false;
                chkboxBackup.Enabled = false;
            }

            if (ConnectionInfo.ConnectionStringAttachDb)
            {
                chAttachDbString.Checked = true;
                txtDataSource.Enabled = false;
                txtInitialCatalog.Enabled = false;
                txtUserId.Enabled = false;
                txtPasswordDataBase.Enabled = false;
            }
            else
            {
                chAttachDbString.Checked = false;
                txtDataSource.Enabled = true;
                txtInitialCatalog.Enabled = true;
                txtUserId.Enabled = true;
                txtPasswordDataBase.Enabled = true;
            }
            HideMask();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            if (ChPass == true)
            {
                DialogResult dr = FarsiMessegeBox.Show("آیا مایلید پسورد عوض شود ؟", "", FMessegeBoxButtons.YesNo, FMessegeBoxIcons.Question);
                if (dr == DialogResult.Yes)
                {
                    if (txtPassword.Text == "" || txtPasswordS.Text == "")
                    {
                        FarsiMessegeBox.Show("رمز عبور خالی است", "", FMessegeBoxButtons.Ok, FMessegeBoxIcons.Information);
                        return;
                    }
                    //if (txtPassword.Text.Length < 4)
                    //{
                    //    FarsiMessegeBox.Show("رمز عبور کوتاه است", "", FMessegeBoxButtons.Ok, FMessegeBoxIcons.Information);
                    //    return;
                    //}
                    if (txtPassword.Text != txtPasswordS.Text)
                    {
                        FarsiMessegeBox.Show("رمز عبور یکی نیست", "اخطار", FMessegeBoxButtons.Ok, FMessegeBoxIcons.Error);
                        txtPassword.Text = "";
                        txtPasswordS.Text = "";
                        return;
                    }
                    else
                    {
                        Security.PasswordProgram_ = Security.MD5(txtPassword.Text);
                    }
                }
            }
            else
            {
                ChPass = false;
            }
            //
            if (ChDatabase == true)
            {
                DialogResult dr = FarsiMessegeBox.Show("آیا مایلید تنظینات بانک اطلاعاتی ذخیره شود ؟", "", FMessegeBoxButtons.YesNo, FMessegeBoxIcons.Question);
                if (dr == DialogResult.Yes)
                {
                    Security s = new Security();
                    string config = txtDataSource.Text + "\n" + txtInitialCatalog.Text + "\n" + txtUserId.Text + "\n" + txtPasswordDataBase.Text;
                    File.WriteAllText(Application.StartupPath + @"\ServerInfo.ini", s.Encrypt_Text(@config, Security.Password_));
                }
                else
                {
                    ChDatabase = false;
                }
            }
            //
            if (ChModem == true)
            {
                DialogResult dr = FarsiMessegeBox.Show("آیا مایلید تنطیمات مودم ذخیره شود ؟", "", FMessegeBoxButtons.YesNo, FMessegeBoxIcons.Question);
                if (dr == DialogResult.Yes)
                {
                    ClsSetting.ModemPortName_ = comboPortModem.SelectedItem.ToString();
                }
            }

            ClsSetting.Backup_A = chkboxBackup.Checked;
            ConnectionInfo.ConnectionStringAttachDb = chAttachDbString.Checked;
            
            if (chEmail)
            {
                DialogResult dr = FarsiMessegeBox.Show("آیا مایلید تنطیمات ایمیل ذخیره شود ؟", "", FMessegeBoxButtons.YesNo, FMessegeBoxIcons.Question);
                if (dr == DialogResult.Yes)
                {
                    ClsSetting.EmailDisplayname = txtEmailDisplayname.Text;
                    ClsSetting.EmailPassword = txtMailPassword.Text;
                    ClsSetting.EmailUserid = txtEmailUsername.Text;
                }
            }

            ClsSetting c = new ClsSetting();
            c.SaveSettingInfo();

            Close();
        }

        private void frmSetting_FormClosed(object sender, FormClosedEventArgs e)
        {
            InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new CultureInfo("fa-IR"));
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            Close();
        }

        //textbox برای چک کردن تغیر کردن
        #region Check TextBox_TextChanged

        private void txtUsername_TextChanged(object sender, EventArgs e)
        {
            chEmail = true;
        }

        private void txtPasswordMail_TextChanged(object sender, EventArgs e)
        {
            chEmail = true;
        }

        private void txtDisplayname_TextChanged(object sender, EventArgs e)
        {
            chEmail = true;
        }
        private void txtPassword_TextChanged(object sender, EventArgs e)
        {
            ChPass = true;
        }

        private void comboPortModem_SelectedIndexChanged(object sender, EventArgs e)
        {
            ChModem = true;
        }

        private void txtDataSource_TextChanged(object sender, EventArgs e)
        {
            ChDatabase = true;
        }

        private void txtInitialCatalog_TextChanged(object sender, EventArgs e)
        {
            ChDatabase = true;
        }

        private void txtUserId_TextChanged(object sender, EventArgs e)
        {
            ChDatabase = true;
        }

        private void txtPasswordDataBase_TextChanged(object sender, EventArgs e)
        {
            ChDatabase = true;
        }
        #endregion
        //

        private void btnTest_Click(object sender, EventArgs e)
        {
            if (ClsSetting.ChPortModem(comboPortModem.SelectedItem.ToString()))
            {
                FarsiMessegeBox.Show("مودم بر روی پورت " + comboPortModem.SelectedItem.ToString() + " پیدا شد", "تست", FMessegeBoxButtons.Ok, FMessegeBoxIcons.Information);
            }
            else
            {
                FarsiMessegeBox.Show("پورت مورد نظر خراب است یا مودم وجود ندارد.", "خطا", FMessegeBoxButtons.Ok, FMessegeBoxIcons.Error);
            }
        }

        private void btnSearchModem_Click(object sender, EventArgs e)
        {
            ShowMask("در حال جستجو \n لطفا صبر کنید");
            bool find = false;
            for (int i = 1; i <= 10; i++)
            {

                if (ClsSetting.ChPortModem("COM" + i.ToString()))
                {
                    comboPortModem.SelectedItem = "COM" + i.ToString();
                    FarsiMessegeBox.Show("مودم بر روی پورت " + comboPortModem.SelectedItem.ToString() + " پیدا شد", "تست", FMessegeBoxButtons.Ok, FMessegeBoxIcons.Information);
                    find = true;
                }
            }
            if (!find)
            {
                comboPortModem.SelectedItem = "Non";
                FarsiMessegeBox.Show("مودم پیدا نشد.", "جستجو مودم", FMessegeBoxButtons.Ok, FMessegeBoxIcons.Information);
            }
            HideMask();
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            DialogResult dr = FarsiMessegeBox.Show("آیا مطمئنید هستید میخواهید تمامیه اطلاعات پاک شود ؟", "", FMessegeBoxButtons.YesNo, FMessegeBoxIcons.Question);
            if (dr == DialogResult.Yes)
            {
                ClsSetting.DeleteNumber();
            }
        }

        private void btnBackup_Click(object sender, EventArgs e)
        {
            ShowMask("... در حال پشتیبانگیری لطفا صبر کنید");
            ClsSetting.BackupDatabase();
            HideMask();
        }

        private void btnRestore_Click(object sender, EventArgs e)
        {
            ShowMask("... در حال بازگردانی اطلاعات لطفا صبر کنید");
            ClsSetting.RestoreDatabase();
            HideMask();
        }

        private void btnAtach_Click(object sender, EventArgs e)
        {
            DialogResult dr = FarsiMessegeBox.Show("دیتابیس در بانک اطلاعاتی قرار ندارد آیا مایلید دیتابیس در بانک اطلاعاتی نصب گردد ؟", "", FMessegeBoxButtons.YesNo, FMessegeBoxIcons.Question);
            if (dr == DialogResult.Yes)
            {
                ShowMask("... در حال نصب بانک اطلاعاتی لطفا صبر کنید");
                ClsSetting.AtachDB();
                HideMask();
            }
        }

        private void ShowMask(string Txt)
        {
            Bitmap bmp = new Bitmap(panel1.Width, panel1.Height);
            panel1.DrawToBitmap(bmp, panel1.ClientRectangle);
            Graphics GR = Graphics.FromImage(bmp);
            GR.FillRectangle(new SolidBrush(Color.FromArgb(150, 0, 0, 0)), panel1.ClientRectangle);
            Font fnt = new Font("Tahoma", 13, FontStyle.Bold, GraphicsUnit.Pixel);
            SizeF Siz = GR.MeasureString(Txt, fnt);
            GR.DrawString(Txt, fnt, new SolidBrush(Color.White), bmp.Width / 2 - Siz.Width / 2, bmp.Height / 2 - Siz.Height / 2);
            LDG.Image = bmp;
            LDG.BringToFront();
            LDG.Visible = true;
            this.Refresh();
            System.Threading.Thread.Sleep(500);
        }
        private void HideMask()
        {
            LDG.Visible = false;
        }

        private void chAttachDbString_CheckedChanged(object sender, EventArgs e)
        {
            if (chAttachDbString.Checked)
            {
                txtDataSource.Enabled = false;
                txtInitialCatalog.Enabled = false;
                txtUserId.Enabled = false;
                txtPasswordDataBase.Enabled = false;
            }
            else
            {
                txtDataSource.Enabled = true;
                txtInitialCatalog.Enabled = true;
                txtUserId.Enabled = true;
                txtPasswordDataBase.Enabled = true;
            }

        }
    }
}
