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

using fbblCostanti;
using fbblControlli;
using fbblDatiCasuali;
using fbblMessaggi;
using fbblTipi;

namespace fdprRealeCasuale
{
    public partial class frmRealeCasuale : Form
    {
        public frmRealeCasuale()
        {
            InitializeComponent();
        }

//************************ PROCEDURE LOCALI DI PROGETTO ***************************

        private void frmRealeCasuale_Esci()
        {
            Application.Exit();
        }


        private void frmRealeCasuale_Nuovo()
        {
            edtMinimo.Clear();
            edtMassimo.Clear();
            edtNumeroCasuale.Clear();

            edtMinimo.Focus();
        }

        private void frmRealeCasuale_TastoPremuto(ref KeyPressEventArgs TastoPremuto)
        {
            if (TastoPremuto.KeyChar==StrumentiCostanti.Punto)
            {
                TastoPremuto.KeyChar = StrumentiCostanti.Virgola;
            }
        }

        private void frmRealeCasuale_Esegui()
        {
            bool ControlloOK;
            double RealeCasuale;
            TIntervalloReali Intervallo;

            ControlloDati(out ControlloOK,out Intervallo);

            if (ControlloOK==true)
            {
                RealeCasuale = StrumentiDatiCasuali.NumeroCasuale(Intervallo);

                edtNumeroCasuale.Text = RealeCasuale.ToString();
            }
        }

        private void ControlloDati(out bool ControlloOK,out TIntervalloReali Intervallo)
        {
            TIntervalloReali DefinizioneIntervallo;

            Intervallo = null;

            DefinizioneIntervallo = new TIntervalloReali(); // Creo in memoria la variabile "DefinizioneIntervallo".

            StrumentiControlli.ControlloNumeroReale(edtMinimo.Text,out ControlloOK,out DefinizioneIntervallo.Minimo);

            if (ControlloOK==false)
            {
                StrumentiMessaggi.MessaggioIntervalloErrato("Intervallo errato: ",DefinizioneIntervallo);

                edtMinimo.Focus();

                return;
            }

            StrumentiControlli.ControlloNumeroReale(edtMassimo.Text, out ControlloOK, out DefinizioneIntervallo.Massimo);

            if (ControlloOK == false)
            {
                StrumentiMessaggi.MessaggioIntervalloErrato("Intervallo errato: ", DefinizioneIntervallo);

                edtMassimo.Focus();

                return;
            }

            StrumentiControlli.ControlloMinoreOUguale(
                                                       DefinizioneIntervallo.Minimo,
                                                       DefinizioneIntervallo.Massimo,
                                                       out ControlloOK
                                                      );

            if (ControlloOK==false)
            {
                StrumentiMessaggi.MessaggioMinoreOUguale("Il numero minore","numero maggiore");

                return;
            }

            Intervallo = DefinizioneIntervallo;

        }


//************************ PROCEDURE DI RISPOSTA AGLI EEVENTI ***************************

        private void btnEsegui_Click(object sender, EventArgs e)
        {
            frmRealeCasuale_Esegui();
        }

        private void btnNuovo_Click(object sender, EventArgs e)
        {
            frmRealeCasuale_Nuovo();
        }

        private void btnEsci_Click(object sender, EventArgs e)
        {
            frmRealeCasuale_Esci();
        }

        private void edtMinimo_KeyPress(object Evento, KeyPressEventArgs TastoPremuto)
        {
            frmRealeCasuale_TastoPremuto(ref TastoPremuto);
        }

        private void edtMassimo_KeyPress(object Evento, KeyPressEventArgs TastoPremuto)
        {
            frmRealeCasuale_TastoPremuto(ref TastoPremuto);
        }

    }
}
