using System;
using System.Windows.Forms;

namespace prog_tesztelo
{
	/// <summary>
	/// A kijelölt fájl/könyvtár legfontosabb tulajdonságainak megjelenítése és az attribútumok módosítása
	/// </summary>
	/// <remarks>
	/// Főbb vezérlők:
	///		nameLabel, sizeLabel, modifiedLabel, attributeLabel -   tulajdonságok feliratai (Label)
	///		nameValue, sizeValue, modifiedValue                 -   tulajdonságok értékei, amelyet a konstruktor paramétereiben adunk át (Label)
	///		propertyGroupBox                                    -   fő groupbox
	///		ownerGroupBox, groupGroupBox, allGroupBox           -   attribútumok csoportosítására szolgáló GroupBox-ok
	///		okButton, cancelButton                              -   a művelet nyugtázására illetve megszakítására szolgáló gombok
	///		checkBox1, checkBox2, checkBox3                     -   tulajdonos jogosultságának módosítása (olvasás, írás, futtatás
	///		checkBox4, checkBox5, checkBox6                     -   csoport jogosultságának módosítása (olvasás, írás, futtatás)
	///		checkBox7, checkBox8, checkBox9                     -   mindenki jogosultságának módosítása (olvasás, írás, futtatás)
	/// </remarks>
    public partial class PropertiesForm : Form
    {
		/// <summary>
		/// Callback delegátus az új attribútumok továbbításához a fő form felé
		/// </summary>
        public PropertiesDelegate PropertiesDataCallback;

		/// <summary>
		/// Az új attribútum oktálisan kifejezve
		/// </summary>
        public int attr = 0;

		/// <summary>
		/// Az új attribútum szövegként (a chmod parancs paramétereként)
		/// </summary>
        public string attribNumber = String.Empty;

		/// <summary>
		/// Megjeleníti a kiválasztott állomány legfontosabb adatait, és lehetőséget ad az attribútumok módosítására
		/// </summary>
		/// <param name="attribute">az adott állomány attribútuma</param>
		/// <param name="name">az adott állomány neve</param>
		/// <param name="size">az adott állomány mérete</param>
		/// <param name="modified">az adott állomány utolsó módosítási ideje</param>
        public PropertiesForm(string attribute, string name, string size, string modified)
        {
            try
            {
                InitializeComponent();
            }
            catch (Exception)
            {
                MessageBox.Show("Hiba a form inicializálása közben.");
                this.Close();
            }

            // Beállítjuk a jelölőnégyzeteket az attribútumnak megfelelően
            if (attribute[1] != '-') checkBox1.Checked = true;
            if (attribute[2] != '-') checkBox2.Checked = true;
            if (attribute[3] != '-') checkBox3.Checked = true;
            if (attribute[4] != '-') checkBox4.Checked = true;
            if (attribute[5] != '-') checkBox5.Checked = true;
            if (attribute[6] != '-') checkBox6.Checked = true;
            if (attribute[7] != '-') checkBox7.Checked = true;
            if (attribute[8] != '-') checkBox8.Checked = true;
            if (attribute[9] != '-') checkBox9.Checked = true;

            // Beállítjuk a tulajdonságokat megjelenítő Label-ek Text tulajdonságát
            this.nameValue.Text = name;
            this.sizeValue.Text = size;
            this.modifiedValue.Text = modified;
        }

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

		/// <summary>
		/// A form bezárása és az adatok továbbítása a fő form felé
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void okButton_Click(object sender, EventArgs e)
        {
            try
            {
                // Callback meghívása az új attribútumokkal
                if (PropertiesDataCallback != null)
                {
                    PropertiesDataCallback(attr.ToString());
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hiba az attribútumok módosítása során.");
            }

			// Csatlakozás után az ablak bezárása
			Close();
        }

    #region CheckBox státuszának megváltozása esetén az új attribútum beállítása

		/// <summary>
		/// A tulajdonos olvasási jogának beállítása
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            switch (checkBox1.CheckState)
            { 
                case CheckState.Checked:
                    {
                        attr += 400;
                        break;
                    }
                case CheckState.Unchecked:
                    {
                        attr -= 400;
                        break;
                    }
            }
            attribNumber = attr.ToString();
        }

		/// <summary>
		/// /// A tulajdonos írási jogának beállítása
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            switch (checkBox2.CheckState)
            {
                case CheckState.Checked:
                    {
                        attr += 200;
                        break;
                    }
                case CheckState.Unchecked:
                    {
                        attr -= 200;
                        break;
                    }
            }
            attribNumber = attr.ToString();
        }

		/// <summary>
		/// /// A tulajdonos futtatási jogának beállítása
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void checkBox3_CheckedChanged(object sender, EventArgs e)
        {
            switch (checkBox3.CheckState)
            {
                case CheckState.Checked:
                    {
                        attr += 100;
                        break;
                    }
                case CheckState.Unchecked:
                    {
                        attr -= 100;
                        break;
                    }
            }
            attribNumber = attr.ToString();
        }

		/// <summary>
		/// A csoport olvasási jogának beállítása
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void checkBox4_CheckedChanged(object sender, EventArgs e)
        {
            switch (checkBox4.CheckState)
            {
                case CheckState.Checked:
                    {
                        attr += 40;
                        break;
                    }
                case CheckState.Unchecked:
                    {
                        attr -= 40;
                        break;
                    }
            }
            attribNumber = attr.ToString();
        }

		/// <summary>
		/// A csoport írási jogának beállítása
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void checkBox5_CheckedChanged(object sender, EventArgs e)
        {
            switch (checkBox5.CheckState)
            {
                case CheckState.Checked:
                    {
                        attr += 20;
                        break;
                    }
                case CheckState.Unchecked:
                    {
                        attr -= 20;
                        break;
                    }
            }
            attribNumber = attr.ToString();
        }

		/// <summary>
		/// A csoport futtatási jogának beállítása
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void checkBox6_CheckedChanged(object sender, EventArgs e)
        {
            switch (checkBox6.CheckState)
            {
                case CheckState.Checked:
                    {
                        attr += 10;
                        break;
                    }
                case CheckState.Unchecked:
                    {
                        attr -= 10;
                        break;
                    }
            }
            attribNumber = attr.ToString();
        }

		/// <summary>
		/// Mindenki olvasási jogának beállítása
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void checkBox7_CheckedChanged(object sender, EventArgs e)
        {
            switch (checkBox7.CheckState)
            {
                case CheckState.Checked:
                    {
                        attr += 4;
                        break;
                    }
                case CheckState.Unchecked:
                    {
                        attr -= 4;
                        break;
                    }
            }
            attribNumber = attr.ToString();
        }

		/// <summary>
		/// Mindenki írási jogának beállítása
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void checkBox8_CheckedChanged(object sender, EventArgs e)
        {
            switch (checkBox8.CheckState)
            {
                case CheckState.Checked:
                    {
                        attr += 2;
                        break;
                    }
                case CheckState.Unchecked:
                    {
                        attr -= 2;
                        break;
                    }
            }
            attribNumber = attr.ToString();
        }

		/// <summary>
		/// Mindenki futtatási jogának beállítása
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
        private void checkBox9_CheckedChanged(object sender, EventArgs e)
        {
            switch (checkBox9.CheckState)
            {
                case CheckState.Checked:
                    {
                        attr += 1;
                        break;
                    }
                case CheckState.Unchecked:
                    {
                        attr -= 1;
                        break;
                    }
            }
            attribNumber = attr.ToString();
        }

    #endregion

    }
}
