using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace prog_tesztelo
{
	/// <summary>
	/// Új fájl/könyvtár létrehozása
	/// </summary>
	/// <remarks>
	/// Vezérlők:
	///		 newFileLabel     -   felirat
	///		 newFileTextBox   -   a létrehozandó fájl/könyvtár név
	///		 okButton        -   'OK' gomb
	///		 cancelButton    -   'Mégse' gomb
	/// </remarks>
    public partial class NewFileForm : Form
    {
		/// <summary>
		/// Callback delegátus az adatok továbbításához
		/// </summary>
        public NewFileDelegate newFileCallback;                             

		/// <summary>
		/// Ha az értéke igaz, akkor a helyi könyvtárban, ha hamis, 
		/// akkor a szerveren hozzuk létre az új fájlt/könyvtárat
		/// </summary>
        private bool isLocal = false;

		/// <summary>
		/// Ha az értéke igaz, akkor fájlt, különben könyvtárat hozunk létre
		/// </summary>
        private bool isFile = false;

		/// <summary>
		/// Konstruktor
		/// </summary>
		/// <param name="isLocal">igaz érték esetén a helyi könyvtárban, hamis érték esetén a szerveren hozzuk létre az új állományt</param>
		/// <param name="isFile">igaz érték esetén fájlt, hamis esetén könyvtárat hozunk létre</param>
        public NewFileForm(bool isLocal, bool isFile)
        {
            try
            {
                InitializeComponent();
            }
            catch (Exception)
            {
                MessageBox.Show("Hiba a form inicializálása közben.");
                this.Close();
            }

            this.isLocal = isLocal;
            this.isFile = isFile;

			// a form címe
			this.Text = ( isFile ? "Új fájl" : "Új könyvtár" );

			// a label beállítása
            this.newFileLabel.Text = ( isFile ? "Új fájl:" : "Új könyvtár:" );

			okButton.Enabled = false;
        }

		/// <summary>
		/// Form bezárása a 'Mégse' gombra kattintva
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void viewLogButtton_Click(object sender, EventArgs e)
        {
            Close();
        }

		/// <summary>
		/// Az 'OK' gombra kattintva az adatok átadása a callback delegátusnak
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void testButton_Click(object sender, EventArgs e)
        {
            try
            {
				// Callback meghívása a login adatokkal
                newFileCallback(newFileTextBox.Text, isLocal, isFile);
            }
            catch (Exception)
            {
                MessageBox.Show("Hiba az átnevezés során.");
            }
			// Csatlakozás után az ablak bezárása
			Close();
        }

		/// <summary>
		/// Csak akkor engedjük elküldeni az adatokat, ha adtunk meg fájlnevet.
		/// Távoli fájlnevek esetén csak a unix fájlkonvenciónak megfelelő fájl-/könyvtárnevet engedélyezünk.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void newFileTextBox_TextChanged(object sender, EventArgs e)
        {
			if ( !isLocal )
			{
				Regex regex = new Regex( "[^0-9a-zA-Z._-]" );
				if ( newFileTextBox.Text.Trim() == string.Empty )
				{
					okButton.Enabled = false;
				}
				else if ( regex.IsMatch( newFileTextBox.Text ) )
				{
					okButton.Enabled = false;
				}
				else
				{
					okButton.Enabled = true;
				}
			}
			else
			{
				okButton.Enabled = ( newFileTextBox.Text == string.Empty.Trim() ? false : true );
			}
        }
    }
}