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 fbblControlli;
using fbblDataGridView;
using fbblDatiCasuali;
using fbblMessaggi;
using fbblTipi;
using fbblVettoriInteri;

namespace fdprVettoreInteriCasuale
{
    public partial class frmVettoreInteriCasuale : Form
    {
        public frmVettoreInteriCasuale()
        {
            InitializeComponent();
        }

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

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

        private void frmVettoreInteriCasuale_Nuovo()
        {
            edtMinimo.Clear();
            edtMassimo.Clear();
            edtNumero.Clear();

            if (grdVettore.ColumnCount>0)
            {
                grdVettore.Columns.Remove("Divisori");
            }

            edtNumero.Focus();
        }

        private void frmVettoreInteriCasuale_Esegui()
        {
            bool ControlloOK;
            int NumeroIntero;
            TIntervalloInteri Intervallo;
            TVettoriInteri VettoreInteri;

            ControlloDati(edtNumero.Text,out ControlloOK,out NumeroIntero,out Intervallo);

            if (ControlloOK)
            {
                VettoreInteri= new TVettoriInteri();

                VettoreInteri = StrumentiDatiCasuali.VettoreCasuale(NumeroIntero, Intervallo);

                StrumentiDataGridView.AggiuntaVettoreADataGridView(VettoreInteri, ref grdVettore);

                StrumentiVettoriInteri.Ordinamento(ref VettoreInteri);

                StrumentiDataGridView.AggiuntaVettoreADataGridView(VettoreInteri, ref grdVettoreOrdinato);

            }

        }


        private void ControlloDati(
                                   string Stringa,
                                   out bool ControlloOK,
                                   out int NumeroIntero,
                                   out TIntervalloInteri Intervallo
                                   )
        {
            int Minimo;
            int Massimo;
            TIntervalloInteri DefinizioneIntervallo;

            Intervallo = null;

            DefinizioneIntervallo= new TIntervalloInteri();

            StrumentiControlli.ControlloNumeroInteroPositivo(edtNumero.Text, out ControlloOK, out NumeroIntero);

            if (ControlloOK==false)
            {
                StrumentiMessaggi.MessaggioNumeroInteroPositivo("Il numero inserito");

                edtNumero.Focus();

                return;
            }

            StrumentiControlli.ControlloNumeroIntero(edtMinimo.Text, out ControlloOK, out Minimo);

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

                edtMinimo.Focus();

                return;
            }

            DefinizioneIntervallo.Minimo = Minimo;

            StrumentiControlli.ControlloNumeroIntero(edtMassimo.Text, out ControlloOK, out Massimo);

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

                edtMassimo.Focus();

                return;
            }

            DefinizioneIntervallo.Massimo = Massimo;

            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 EVENTI ****************

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

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

        private void edtEsci_Click(object sender, EventArgs e)
        {
            frmVettoreInteriCasuale_Esci();
        }


    }
}
