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>
	/// Átnevezés
	/// </summary>
	/// <remarks>
	/// A konstruktorban paraméterként kapott elem átnevezésére szolgál
	///  
	/// Főbb vezérlők:
	///		renameLabel     -   'Átnevezés:' felirat
	///		renameTextBox   -   az új név
	///		okButton        -   'OK' gomb
	///		cancelButton    -   'Mégse' gomb
	/// </remarks>
    public partial class RenameForm : Form
    {
		/// <summary>
		/// Callback delegátus az adatok továbbításához
		/// </summary>
        public RenameDelegate RenameFileCallback;

		/// <summary>
		/// Ha helyi fájlt/könyvtárt nevezünk át azt az adattag 'igaz' értéke jelzi
		/// </summary>
		private bool isLocal = false;

		/// <summary>
		/// A paraméterként kapott elem átnevezése
		/// </summary>
		/// <param name="selectedItem">az átnevezendő elem</param>
        public RenameForm(string selectedItem)
        {
            try
            {
                InitializeComponent();
            }
            catch (Exception)
            {
                MessageBox.Show("Hiba a form inicializálása közben.");
                this.Close();
            }

			// a form címe
			this.Text = "Átnevezés";

			// a label beállítása
			this.renameLabel.Text = "Átnevezés";

			// az átnevezendő név beállítása a paraméternek megfelelően
            renameTextBox.Text = selectedItem;
        }

		/// <summary>
		/// Az első paraméterként kapott elem átnevezése
		/// </summary>
		/// <param name="selectedItem">az átnevezendő elem</param>
		/// <param name="isLocal">ha értéke igaz, akkor helyi állományt, ha hamis, akkor a szerveren található állományt nevezünk át</param>
        public RenameForm(string selectedItem, bool isLocal) : this(selectedItem)
        {
            this.isLocal = isLocal;
        }

		/// <summary>
		/// Form bezárása a Cancel-re kattintva
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void viewLogButtton_Click(object sender, EventArgs e)
        {
            Close();
        }

		/// <summary>
		/// OK-ra kattintva az átnevezés elvégzése
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void testButton_Click(object sender, EventArgs e)
        {
            try
            {
				// Callback meghívása a szükséges paraméterekkel
                RenameFileCallback(renameTextBox.Text, isLocal);
            }
            catch (Exception)
            {
                MessageBox.Show("Hiba az átnevezés során.");
            }
			this.Close();     
        }

		/// <summary>
		/// A TextBox szövegének megváltozását vizsgáljuk, üres sztringet nem fogadunk el az átnevezés során.
		/// 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 renameTextBox_TextChanged(object sender, EventArgs e)
        {
			if ( !isLocal )
			{
				Regex regex = new Regex( "[^0-9a-zA-Z._-]" );
				if ( renameTextBox.Text.Trim() == string.Empty )
				{
					okButton.Enabled = false;
				}
				else if ( regex.IsMatch( renameTextBox.Text ) )
				{
					okButton.Enabled = false;
				}
				else
				{
					okButton.Enabled = true;
				}
			}
			else
			{
				okButton.Enabled = ( renameTextBox.Text == string.Empty.Trim() ? false : true );
			}
        }
    }
}