using System;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
using prog_tesztelo.Properties;

namespace prog_tesztelo
{
	/// <summary>
	/// Az alkalmazás beállításainak lekérdezése és beállítása
	/// </summary>
	/// <remarks>
	/// Itt nyílik lehetőségünk megváltoztatni az alapértelmezett szerkesztőt és nézőkét,
	/// valamint beállítani, hogy a fájlböngészőben megjelenjenek-e a rejtett fájlok.
	/// </remarks>
    public partial class ConfigurationForm : Form
    {
		/// <summary>
		/// A Windows Notepad az alapértelmezett nézőke és szerkesztő
		/// </summary>
        public static string notepad = MainForm.NOTEPAD;

		/// <summary>
		/// Callback delegátus az adatok továbbításához
		/// </summary>
        public ConfigurationDelegate ConnectDataCallback;

		/// <summary>
		/// Az alapértelmezett konstruktor
		/// </summary>
        public ConfigurationForm()
        {
            try
            {
                InitializeComponent();
            }
            catch (Exception)
            {
                MessageBox.Show("Hiba a form inicializálása közben.");
                this.Close();
            }
        }

		/// <summary>
		/// Mentett beállítások beolvasása és megjelenítése a form megfelelő vezérlőiben
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void Form5_Load(object sender, EventArgs e)
        {
            try
            {
                // A Settings fájlból beolvassuk az editor és a nézőke elérési útvonalát
                // Ha nem található meg a beállítás, akkor alapértelmezettként a notepad-et állítjuk be
                if (Settings.Default.viewer != null)
                {
                    viewerTextBox.Text = Settings.Default.viewer;
                }
                else
                {
                    viewerTextBox.Text = notepad;
                }

                if (Settings.Default.editor != null)
                {
                    editorTextBox.Text = Settings.Default.editor;
                }
                else
                {
                    editorTextBox.Text = notepad;
                }

				if (Settings.Default.workingdir != null)
				{
					workspaceTextBox.Text = Settings.Default.workingdir;
				}
				else
				{
					workspaceTextBox.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
				}

                // Beállítjuk a rejtett fájlok megjelenítését
                hiddenFilesCheckBox.Checked = Settings.Default.hidden_files;
            }
            catch (Exception)
            {
                MessageBox.Show("Hiba a beállítások beolvasása során.");
                Close();
            }
        }

		/// <summary>
		/// Alapértelmezett nézőke beállítása
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void viewerDefaultButton_Click(object sender, EventArgs e)
        {
            try
            {
                viewerTextBox.Text = notepad;
            }
            catch (Exception)
            {
                MessageBox.Show("Hiba a nézőke beállítása során.");
                Close();
            }
        }

		/// <summary>
		/// Alapértelmezett szerkesztő beállítása
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void editorDefaultButton_Click(object sender, EventArgs e)
        {
            try
            {
                editorTextBox.Text = notepad;
            }
            catch (Exception)
            {
                MessageBox.Show("Hiba a szerkesztő beállítása során.");
                Close();            
            }
        }

		/// <summary>
		/// Alapértelmezett munkakönyvtár beállítása
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void workingDirDefaultButton_Click(object sender, EventArgs e)
		{
			try
			{
				workspaceTextBox.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
			}
			catch ( Exception )
			{
				MessageBox.Show( "Hiba a munkakönyvtár beállítása során." );
				Close();
			}
		}

		/// <summary>
		/// Fájl megnyitása ablak a nézőke kiválasztásához
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void openFileViewerButton_Click(object sender, EventArgs e)
        {
            try
            {
                openFileDialog1.FileName = string.Empty;
                openFileDialog1.Filter = "Futtatható fájlok(*.exe)|*.exe|Minden fájl (*.*)|*.*";
                openFileDialog1.ShowDialog();
            }
            catch (Exception)
            {
                MessageBox.Show("Hiba a fájlböngészés során.");
                Close();
            }
        }

		/// <summary>
		/// Fájl megnyitása ablak a szerkesztő kiválasztásához
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void openFileEditorButton_Click(object sender, EventArgs e)
        {
            try
            {
                openFileDialog2.FileName = string.Empty;
                openFileDialog2.Filter = "Futtatható fájlok(*.exe)|*.exe|Minden fájl (*.*)|*.*";
                openFileDialog2.ShowDialog();
            }
            catch (Exception)
            {
                MessageBox.Show("Hiba a fájlböngészés során.");
                Close();
            }
        }

		/// <summary>
		/// Könyvtár kiválasztása ablak a helyi munkakönyvtár kiválasztásához
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void openFileWorkingDirButton_Click(object sender, EventArgs e)
		{
			try
			{
				folderBrowserDialog1.RootFolder = Environment.SpecialFolder.MyComputer;
				DialogResult dr = folderBrowserDialog1.ShowDialog();
				if (dr == DialogResult.OK)
				{
					workspaceTextBox.Text = folderBrowserDialog1.SelectedPath;
				}
			}
			catch (Exception)
			{
                MessageBox.Show("Hiba a fájlböngészés során.");
                Close();			
			}
		}

		/// <summary>
		/// A 'Mégse' gombra klikkelve bezárjuk a formot
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void cancelButton_Click(object sender, EventArgs e)
        {
            Close();
        }

		/// <summary>
		/// Az 'OK' gombra klikkelve elmentjük a beállításokat
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void okButton_Click(object sender, EventArgs e)
        {
            try
            {
                // ha valamelyik textbox üres, hibaüzenetet küldünk
                if (viewerTextBox.Text.Trim() == string.Empty)
                {
                    MessageBox.Show("Kérem adja meg a nézőke elérési útvonalát!");
                    viewerTextBox.Focus();
                }
				else if ( editorTextBox.Text.Trim() == string.Empty )
                {
                    MessageBox.Show("Kérem adja meg a szerkesztő elérési útvonalát!");
                    editorTextBox.Focus();
                }
				else if ( workspaceTextBox.Text.Trim() == string.Empty )
				{
					MessageBox.Show("Kérem adja meg a helyi munkakönyvtár elérési útvonalát!");
					workspaceTextBox.Focus();
				}
                else
                {
                    // csak megváltozott beállításokat mentünk el
                    if (Settings.Default.viewer != viewerTextBox.Text)
                    {
                        Settings.Default.viewer = viewerTextBox.Text;
                    }
                    if (Settings.Default.editor != editorTextBox.Text)
                    {
                        Settings.Default.editor = editorTextBox.Text;
                    }
					if (Settings.Default.workingdir != workspaceTextBox.Text)
					{
						Settings.Default.workingdir = workspaceTextBox.Text;
					}
                    if (Settings.Default.hidden_files != hiddenFilesCheckBox.Checked)
                    {
                        Settings.Default.hidden_files = hiddenFilesCheckBox.Checked;
                    }

					if (Settings.Default.editor == string.Empty || !File.Exists(Settings.Default.editor))
					{
						Settings.Default.editor = notepad;
					}
					else if (Settings.Default.viewer.Trim() == string.Empty || !File.Exists(Settings.Default.viewer))
					{
						Settings.Default.viewer = notepad;
					}
					else if (Settings.Default.workingdir.Trim() == string.Empty || !Directory.Exists(Settings.Default.workingdir))
					{
						Settings.Default.workingdir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
					}

                    // beállítások mentése
                    Settings.Default.Save();
                    // módosítjuk a láthatóságot
                    ConnectDataCallback(hiddenFilesCheckBox.Checked);

					// bezárjuk az ablakot
					Close();
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hiba a beállítások mentése során.");
				this.Close();
            }
        }

		/// <summary>
		/// Nézőke kiválasztásának véglegesítése
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
			try
			{
				viewerTextBox.Text = openFileDialog1.FileName;
			}
			catch ( Exception )
			{
				MessageBox.Show( "Hiba a fájl kiválasztása során." );
				this.Close();
			}
        }

		/// <summary>
		/// Szerkesztő kiválasztásának véglegesítése
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void openFileDialog2_FileOk(object sender, CancelEventArgs e)
        {
			try
			{
				editorTextBox.Text = openFileDialog2.FileName;
			}
			catch ( Exception )
			{
				MessageBox.Show( "Hiba a fájl kiválasztása során." );
				this.Close();
			}
        }
    }
}