using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Wanderer.model;
using Wanderer.view.Controls;

namespace Wanderer.view
{
    public partial class FormJeu : Form
    {
        bool gareCreated = true;
        int nombreMarks;
        int nombreRandonneurs;
        int tailleTerritoire;
        int nombreTour;
        int nombreUsine;
        int nombreRefuge;
        int nombreChemin;
        int nombreClub;
        int bonus = 0;


        const int limiteRandonneur = 100;
        const int limiteTerritoire = 200;

        public void updateNombreMarks(int nombreUsine, int nombreRefuge)
        {
            nombreMarks = nombreUsine * 5 + nombreRefuge * 5 + 10 + nombreMarks;
        }

        public void updateNombreRandonneurs(int nombreClub, int nombreChemins, int nombreRefuges)
        {
            nombreRandonneurs = nombreClub * 6 + nombreChemins * 2 + nombreRefuges * 3 - 10 * nombreUsine + bonus;
        }

        public void updateTailleTerritoire(int nombreClub, int nombreChemins, int nombreRefuges)
        {
            tailleTerritoire = nombreChemins * 5 + nombreRefuges * 10;
        }

        public void disable()
        {
            this.Enabled = false;
        }


        public void updateLabels()
        {
            if(nombreTour > 0)
            {
                updateNombreMarks(nombreUsine, nombreRefuge);
            }
            updateNombreRandonneurs(nombreClub, nombreChemin, nombreRefuge);
            updateTailleTerritoire(nombreClub, nombreChemin, nombreRefuge);

            lblArgent.Text = "Argent :" + nombreMarks;
            lblMarcheur.Text = "Marcheurs : " + nombreRandonneurs;
            lblTour.Text = "Nombre d'action : " + nombreTour++;
            if (MapView.SelectedTile != null && MapView.SelectedTile.model.HasChanged)
            {
                MapView.SelectedTile.Image = image();
                MapView.SelectedTile.model.HasChanged = false;
            }
        }


        public FormJeu()
        {
            InitializeComponent();
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            FormAide formAide = new FormAide();
            formAide.Show();
        }

        private void btnUsine_Click(object sender, EventArgs e)
        {
            if (nombreMarks < 60) return;
            MapView.SelectedTile.model.Improvement = Improvement.Factory;
            nombreUsine++;
            nombreMarks -= 40;
            updateLabels();
        }

        private void btnTrain_Click(object sender, EventArgs e)
        {
            if(nombreMarks >= 10 && gareCreated)
            {
                MapView.SelectedTile.model.Improvement = Improvement.TrainStation;
                gareCreated = false;
                nombreMarks -= 10;
                updateLabels();
            }
        }

        private void btnRefuge_Click(object sender, EventArgs e)
        {
            if (nombreRefuge % 5 == 0 && nombreRefuge != 0)
            {
                bonus += 5;
            }
            if (nombreMarks >= 30)
            {
                MapView.SelectedTile.model.Improvement = Improvement.Refuge;
                nombreRefuge++;
                nombreMarks -= 30;
                updateLabels();
            }
        }


        private void btnChemin_Click(object sender, EventArgs e)
        {
            if (nombreChemin % 5 == 0 && nombreRefuge != 0)
            {
                bonus += 2;
            }
            if (nombreMarks >= 10)
            {
                MapView.SelectedTile.model.Improvement = Improvement.Path;
                nombreChemin++;
                nombreMarks -= 10;
                updateLabels();
            }
        }

        private void btnClub_Click(object sender, EventArgs e)
        {
            if(nombreMarks >= 15)
            {
                MapView.SelectedTile.model.Improvement = Improvement.Club;
                nombreClub++;
                nombreMarks -= 10;
                updateLabels();
            }
        }

        private void mapView1_Paint(object sender, PaintEventArgs e)
        { 
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void mapView1_Click(object sender, EventArgs e)
        {
           
        }

        private void FormJeu_Load(object sender, EventArgs e)
        {
            mapView1.Model = new Map(20,10);
            nombreMarks = 40;
            updateLabels();
        }

        private void FormJeu_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }

        public Image image()
        {
            switch (MapView.SelectedTile.model.Improvement)
            {
                case Improvement.Club:
                    return btnClub.Image;
                case Improvement.Factory:
                    return btnUsine.Image;
                case Improvement.Path:
                    return btnChemin.Image;
                case Improvement.Refuge:
                    return btnRefuge.Image;
                case Improvement.TrainStation:
                    return btnTrain.Image;
            }

            return null;
        }

    }
}