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 System.Data.SqlClient;
using System.IO;


namespace AzmoonGir
{
    public partial class FrmBackUp : Form
    {
         SqlCommand command;
        SqlConnection connect;
       
        Boolean isbackup = false;
        string strpactch = "";

        public FrmBackUp()
        {
            InitializeComponent();
        }

       

        private void btnbackup_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(txtpatch.Text))
                errorProvider1.SetError(btnbrowse, "مسیر فایل پشتیبان را انتخاب کنید");

            else if (string.IsNullOrWhiteSpace(txtname.Text))
                errorProvider1.SetError(txtname, "نام فایل پشتیبان را انتخاب کنید");
            else if (File.Exists(txtpatch.Text + "\\" + txtname.Text.Trim() + ".bak"))
                errorProvider1.SetError(txtname, "فایلی با همین نام در مسیر انتخاب شده وجود دارد . نام دیگری را انتخاب کنید");

            else
            {

                try
                {
                   isbackup = true;
                   btnbackup.Enabled = false;
                   btncancel.Enabled = true;

               
                    errorProvider1.SetError(txtname, "");
                    errorProvider1.SetError(btnbrowse, "");
                    
                    

                  
                    connect = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\DbAzmoon.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;Asynchronous Processing = True");
                    connect.Open();
                  
                    strpactch = "'" + txtpatch.Text + "\\" + txtname.Text.Trim() + ".bak'";
                    command = new SqlCommand(@"backup database [" + System.Windows.Forms.Application.StartupPath + "\\DbAzmoon.mdf] to disk =" + strpactch + "with init,stats=10", connect);
                    AsyncCallback CallBackDelegate = HandleCallBack;
                    command.BeginExecuteNonQuery(CallBackDelegate, command);
                 
                }
                catch
                {
                    
                    Frm_Message Fm = new Frm_Message();
                    Fm.lbltext.Text = "تهیه فایل پشتیبان با مشکل مواجه شد";
                    Fm.ImgClose.Visible = true;
                    Fm.ImgYes.Visible = false;
                    Fm.ImgNo.Visible = false;
                    Fm.ShowDialog();
                    isbackup = false;
                }

            }

        }




            private void HandleCallBack (IAsyncResult Result)
            {
                Frm_Message Fm = new Frm_Message();

                try
                {
                    command = (SqlCommand)Result.AsyncState;
                    command.EndExecuteNonQuery(Result);

                    Fm.lbltext.Text = "فایل پشتیبان با موفقیت ساخته شد";
                    Fm.ImgClose.Visible = true;
                    Fm.ImgYes.Visible = false;
                    Fm.ImgNo.Visible = false;
                    Fm.ShowDialog();
                    isbackup = false;
                }
                catch
                {
                  
                    Fm.lbltext.Text = "عملیات پشتیبان گیری متوقف شد";
                    Fm.ImgClose.Visible = true;
                    Fm.ImgYes.Visible = false;
                    Fm.ImgNo.Visible = false;
                    Fm.ShowDialog();
                    isbackup = false;
                }

                connect.Close();

                // age injuri nnvisin error mide vase true kardan enable inja

                this.BeginInvoke((MethodInvoker)delegate()
                {
                    btnbackup.Enabled = true;
                    btncancel.Enabled = false;
                });
              


            }





            
        private void btnbrowse_Click(object sender, EventArgs e)
        {
            Frm_Message Fm = new Frm_Message();

            if (folderBrowserDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {


                if (folderBrowserDialog1.SelectedPath.Substring(0, 1) == "C")
                {

                    Fm.lbltext.Text = "اجباری نیست اما توصیه میشود درایو دیگری بجز درایو" + " c " + "را برای تهیه پشتیبان انتخاب کنید";
                    Fm.ImgClose.Visible = true;
                    Fm.ImgYes.Visible = false;
                    Fm.ImgNo.Visible = false;
                    Fm.ShowDialog();
                }





                if (folderBrowserDialog1.SelectedPath.Length > 350)
                {

                    Fm.lbltext.Text = "طول مسیر انتخاب شده بیشتر از 350 کاراکتر است.مسیر کوتاهتری را انتخاب کنید";
                    Fm.ImgClose.Visible = true;
                    Fm.ImgYes.Visible = false;
                    Fm.ImgNo.Visible = false;
                    Fm.ShowDialog();

                }
                else
                {
                    txtpatch.Text = folderBrowserDialog1.SelectedPath;
                }





            }

        }

        private void rectangleShape1_Click(object sender, EventArgs e)
        {

        }

        private void btncancel_Click(object sender, EventArgs e)
        {
            command.Cancel();
        }

        private void FrmBackUp_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (isbackup == true)
            {
                e.Cancel = true;

                Frm_Message Fm = new Frm_Message();
                Fm.lbltext.Text = "در حین پشتیبان گیری نباید از فرم خارج شوید";
                Fm.ImgClose.Visible = true;
                Fm.ImgYes.Visible = false;
                Fm.ImgNo.Visible = false;
                Fm.ShowDialog();
               



            }
        }

        private void FrmBackUp_Load(object sender, EventArgs e)
        {

        }
    }
}
