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

namespace Setup
{
    /// <summary>
    /// Třída pro panel nastavení WLAN
    /// </summary>
    public partial class CtrlPanelWlan : CtrlPanel
    {
        /// <summary>
        /// Simulace PSK pro předvyplnění textboxu, protože skutečný PSK nelze
        /// z bezp. důvodů z modulu stáhnout.
        /// </summary>
        const string SIMULKEY = "        ";

        /// <summary>
        /// Vytvoření instance panelu
        /// </summary>
        public CtrlPanelWlan()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Zajistí stažení dat z modulu
        /// </summary>
        public override void DownloadData()
        {
            base.DownloadData();
        }

        /// <summary>
        /// Provede stažení dat v případě, že dosud nebylo provedeno a jejich zobrazení
        /// </summary>
        public override void ShowData()
        {
            base.ShowData();

            if (DataObject.Retrieved)
            {
                DataWlan data = (DataObject as DataWlan);

                tbSSID.Text = data.Ssid;
                trbPower.Value = data.TxPower;
                cbxSec.SelectedIndex = (int)data.Auth;

                if (data.Auth == AuthMode.None)
                {
                    tbKey.Text = String.Empty;
                    tbKey.Enabled = false;
                }
                else
                {
                    tbKey.Text = SIMULKEY;
                    tbKey.Enabled = true;
                }
            }
        }

        /// <summary>
        /// Validace dat zadaných uživatelem ve formuláři
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public override bool ValidateData(StringBuilder message)
        {
            if (message == null)
                message = new StringBuilder();

            DataWlan data = (DataObject as DataWlan);

            tbSSID.Text = tbSSID.Text.Trim();
            tbKey.Text = tbKey.Text.Trim();

            if (String.IsNullOrEmpty(tbSSID.Text) || tbSSID.Text.Contains(" "))
                message.AppendFormat("SSID nebyl zadán nebo obsahuje mezery{0}", Environment.NewLine);
            else
                data.Ssid = tbSSID.Text;

            if (cbxSec.SelectedIndex < 0)
                message.AppendFormat("Typ autorizace nebyl zvolen {0}", Environment.NewLine);
            else
                data.Auth = (AuthMode)cbxSec.SelectedIndex;

            if (data.Auth != AuthMode.None && (String.IsNullOrEmpty(tbKey.Text) || tbKey.Text == SIMULKEY || tbKey.Text.Contains(" ")))
                message.AppendFormat("Přístupový klíč nebyl zadán  nebo obsahuje mezery{0}", Environment.NewLine);
            else
                data.Keyword = tbKey.Text;

            data.TxPower = (byte)trbPower.Value;
            return base.ValidateData(message);
        }

        /// <summary>
        /// Uložení dat do modulu
        /// </summary>
        /// <returns></returns>
        public override bool UploadData()
        {
            if (base.UploadData())
            {
                if (MessageBox.Show(
                    "Toto nastavení vyžaduje restart modulu, chcete provést restart nyní?",
                    "Potvrzení",
                    MessageBoxButtons.YesNo,
                    MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {
                    DataObject.Module.Restart();
                }
                return true;
            }
            return false;
        }

        /// <summary>
        /// Obsluha změny zabezpečení
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cbxSec_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbxSec.SelectedIndex == (int)AuthMode.Wep)
            {
                MessageBox.Show(
                    "Metoda WEP není podporována",
                    "Upozornění",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Hand);
                cbxSec.SelectedIndex = (int)AuthMode.Wpa2;
            }

            tbKey.Enabled = (cbxSec.SelectedIndex != (int)AuthMode.None);
        }

    }
}
