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 fbblVeicolo;
using fbblImmagini;
using fbblMessaggi;

namespace fdprAvanzamentoSimulazioneVeicolo
{
    public partial class frmSimulazioneVeicolo : Form
    {
        // Dati membro locali

        private Veicolo OggettoMacchina;
        private string ImmagineMacchinaUp = "c:\\Immagini\\AutoUp.bmp";
        private string ImmagineMacchinaDown = "c:\\Immagini\\AutoDown.bmp";
        private string ImmagineMacchinaLeft = "c:\\Immagini\\AutoLeft.bmp";
        private string ImmagineMacchinaRight = "c:\\Immagini\\AutoRight.bmp";
        private int PassoAvanzamento = 40;


        public frmSimulazioneVeicolo()
        {
            InitializeComponent();
        }

// PROCEDURE LOCALI DI PROGETTO

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

        private void frmSimulazioneVeicolo_CaricaAvvio()
        {
            int LarghezzaImmagine;
            int AltezzaImmagine;
            int LarghezzaForm;
            int AltezzaForm;
            int LarghezzaGroupBox;
            int AltezzaGroupBox;
            int PosizionamentoVerticaleGroupBox = 12;
            int PosizionamentoOrizzonateleGroupBox = 12;
            string NomeGuidatore = "Giuliano";
            string ModelloMacchina = "Golf";

            StrumentiImmagini.DimensioniFormCorrente(this,out LarghezzaForm,out AltezzaForm);

            this.OggettoMacchina = new Veicolo(ModelloMacchina,NomeGuidatore,LarghezzaForm/2,AltezzaForm/2);

            edtAuto.Text = this.OggettoMacchina.get_ModelloVeicolo();
            edtPilota.Text = this.OggettoMacchina.get_NominativoGuidatore();

            StrumentiImmagini.DimensioniGroupBoxCorrente(grpMovimento,out LarghezzaGroupBox,out AltezzaGroupBox);

            PosizionamentoOrizzonateleGroupBox = LarghezzaForm - LarghezzaGroupBox - PosizionamentoOrizzonateleGroupBox;

            grpMovimento.Location = new Point(PosizionamentoOrizzonateleGroupBox,PosizionamentoVerticaleGroupBox);

            imgMacchina.Location = new Point(this.OggettoMacchina.get_X(), this.OggettoMacchina.get_Y() );

            StrumentiImmagini.DimensioniImmagineCorrente(imgMacchina,out LarghezzaImmagine,out AltezzaImmagine);

            imgMacchina.Size = new Size(LarghezzaImmagine,AltezzaImmagine);

            timAvanzamentoSimulazione.Enabled = true;
            timAvanzamentoSimulazione.Interval = 500;

        }

        private void frmSimulazioneVeicolo_Sinistra()
        {
            bool ControlloOK;
            int Altezza;
            int Larghezza;
            int CoordinataX;
            int CoordinataY;

            StrumentiImmagini.CaricaImmagini(this.ImmagineMacchinaLeft,out ControlloOK,ref imgMacchina);

            if (ControlloOK==false)
            {
                StrumentiMessaggi.MessaggioCaricamentoFileErrato("Immagine","Errore");

                return;
            }

            CoordinataX = this.OggettoMacchina.get_X();
            CoordinataY = this.OggettoMacchina.get_Y();

            CoordinataX = CoordinataX - this.PassoAvanzamento;

            this.OggettoMacchina.set_X(CoordinataX);

            imgMacchina.Location = new Point(CoordinataX,CoordinataY);

            StrumentiImmagini.DimensioniImmagineCorrente(imgMacchina,out Larghezza,out Altezza);

            imgMacchina.Size = new Size(Larghezza,Altezza);

            this.OggettoMacchina.sinistra();

            edtDirezione.Text = this.OggettoMacchina.get_Direzione();

        }

        private void frmSimulazioneVeicolo_Destra()
        {
            bool ControlloOK;
            int Altezza;
            int Larghezza;
            int CoordinataX;
            int CoordinataY;

            StrumentiImmagini.CaricaImmagini(this.ImmagineMacchinaRight, out ControlloOK, ref imgMacchina);

            if (ControlloOK == false)
            {
                StrumentiMessaggi.MessaggioCaricamentoFileErrato("Immagine", "Errore");

                return;
            }

            CoordinataX = this.OggettoMacchina.get_X();
            CoordinataY = this.OggettoMacchina.get_Y();

            CoordinataX = CoordinataX + this.PassoAvanzamento;

            this.OggettoMacchina.set_X(CoordinataX);

            imgMacchina.Location = new Point(CoordinataX, CoordinataY);

            StrumentiImmagini.DimensioniImmagineCorrente(imgMacchina, out Larghezza, out Altezza);

            imgMacchina.Size = new Size(Larghezza, Altezza);

            this.OggettoMacchina.destra();

            edtDirezione.Text = this.OggettoMacchina.get_Direzione();

        }

        private void frmSimulazioneVeicolo_Avanti()
        {
            bool ControlloOK;
            int Altezza;
            int Larghezza;
            int CoordinataX;
            int CoordinataY;

            StrumentiImmagini.CaricaImmagini(this.ImmagineMacchinaUp, out ControlloOK, ref imgMacchina);

            if (ControlloOK == false)
            {
                StrumentiMessaggi.MessaggioCaricamentoFileErrato("Immagine", "Errore");

                return;
            }

            CoordinataX = this.OggettoMacchina.get_X();
            CoordinataY = this.OggettoMacchina.get_Y();

            CoordinataY = CoordinataY - this.PassoAvanzamento;

            this.OggettoMacchina.set_Y(CoordinataY);

            imgMacchina.Location = new Point(CoordinataX, CoordinataY);

            StrumentiImmagini.DimensioniImmagineCorrente(imgMacchina, out Larghezza, out Altezza);

            imgMacchina.Size = new Size(Larghezza, Altezza);

            this.OggettoMacchina.diritto();

            edtDirezione.Text = this.OggettoMacchina.get_Direzione();

        }

        private void frmSimulazioneVeicolo_Indietro()
        {
            bool ControlloOK;
            int Altezza;
            int Larghezza;
            int CoordinataX;
            int CoordinataY;

            StrumentiImmagini.CaricaImmagini(this.ImmagineMacchinaDown, out ControlloOK, ref imgMacchina);

            if (ControlloOK == false)
            {
                StrumentiMessaggi.MessaggioCaricamentoFileErrato("Immagine", "Errore");

                return;
            }

            CoordinataX = this.OggettoMacchina.get_X();
            CoordinataY = this.OggettoMacchina.get_Y();

            CoordinataY = CoordinataY + this.PassoAvanzamento;

            this.OggettoMacchina.set_Y(CoordinataY);

            imgMacchina.Location = new Point(CoordinataX, CoordinataY);

            StrumentiImmagini.DimensioniImmagineCorrente(imgMacchina, out Larghezza, out Altezza);

            imgMacchina.Size = new Size(Larghezza, Altezza);

            this.OggettoMacchina.retromarcia();

            edtDirezione.Text = this.OggettoMacchina.get_Direzione();

        }

        private void frmSimulazioneVeicolo_Timer()
        {
            switch (this.OggettoMacchina.get_Direzione())
            {
                case "LEFT":
                    frmSimulazioneVeicolo_Sinistra();
                    break;

                case "RIGHT":
                    frmSimulazioneVeicolo_Destra();
                    break;
                
                case "FORWARD":
                    frmSimulazioneVeicolo_Avanti();
                    break;

                case "BACK":
                    frmSimulazioneVeicolo_Indietro();
                    break;

                default:
                    break;
            }
        }

        private void frmSimulazioneVeicolo_TurboClick()
        {
            if (chkTurbo.Checked == true)
            {
                this.PassoAvanzamento = this.PassoAvanzamento + 80;
            }
            else 
            {
                this.PassoAvanzamento = this.PassoAvanzamento - 80;
            }
        }

// PROCEDURE DI RISPOSTA AGLI EVENTI

        private void btnSinistra_Click(object sender, EventArgs e)
        {
            frmSimulazioneVeicolo_Sinistra();
        }

        private void btnAvanti_Click(object sender, EventArgs e)
        {
            frmSimulazioneVeicolo_Avanti();
        }

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

        private void btnDestra_Click(object sender, EventArgs e)
        {
            frmSimulazioneVeicolo_Destra();
        }

        private void btnIndietro_Click(object sender, EventArgs e)
        {
            frmSimulazioneVeicolo_Indietro();
        }

        private void frmSimulazioneVeicolo_Load(object sender, EventArgs e)
        {
            frmSimulazioneVeicolo_CaricaAvvio();
        }

        private void timAvanzamentoSimulazione_Tick(object sender, EventArgs e)
        {
            frmSimulazioneVeicolo_Timer();
        }

        private void chkTurbo_Click(object sender, EventArgs e)
        {
            frmSimulazioneVeicolo_TurboClick();
        }

 
    }
}
