package com.tn.quizz;

import java.util.ArrayList;
import java.util.Random;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.GridLayout.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.example.quizz.R;
import com.tn.entity.Monument;
import com.tn.entity.Partie;

@SuppressLint("NewApi")
public class MainActivity extends Activity {

	// declaration des images a afficher
	private ImageView imageATrouver;
	private ImageView[] tableauDrapeau;
	private ImageView imageResultat;

	// declaration du text a afficher avec le resultat
	private TextView textResultat;

	private View toastResultat;

	// declaration des layouts
	private LinearLayout layoutImageATrouver;
	private LinearLayout layoutDrapeau1;
	private LinearLayout layoutDrapeau2;

	// declaration de la partie et du monument
	private Partie partie;
	private Monument monumentATrouver;

	// declaration d'un id pour identifier le drapeau correcte a choisir
	private int idDrapeauAtrouver;

	// declaration d'un entier qui represente le drapeau selectionné
	private int drapeauSelectionne;

	// Nombre de tentatives
	private int nbrTentatives = 0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout);

		/*
		 * Display display = getWindowManager().getDefaultDisplay(); Point size
		 * = new Point(); display.getSize(size); int width = size.x; int height
		 * = size.y;
		 */

		// Initialisation de la partie
		partie = new Partie(getApplicationContext(), 0);

		initLayout();

		jouer();

		initListener();
	}

	// Inialiation des layouts (interface graphiques)
	public void initLayout() {

		// affectation des layouts
		layoutImageATrouver = (LinearLayout) findViewById(R.id.layout_imageATrouver);

		layoutDrapeau1 = (LinearLayout) findViewById(R.id.layout_drapeau1);

		layoutDrapeau2 = (LinearLayout) findViewById(R.id.layout_drapeau2);

		// Instanciation des ImageViews
		imageATrouver = new ImageView(MainActivity.this);
		imageATrouver.setClickable(false);

		tableauDrapeau = new ImageView[4];

		toastResultat = getLayoutInflater().inflate(R.layout.toast,
				(ViewGroup) findViewById(R.id.toastLayout));

		imageResultat = (ImageView) toastResultat
				.findViewById(R.id.resultatImg);
		textResultat = (TextView) toastResultat
				.findViewById(R.id.resultatInfoTxt);

		for (int i = 0; i < tableauDrapeau.length; i++) {
			tableauDrapeau[i] = new ImageView(MainActivity.this);
			tableauDrapeau[i].setTag("" + i); // on lui associe un Tag pour
												// l'identifier
			tableauDrapeau[i]
					.setBackgroundResource(R.drawable.background_neutre); // on
																			// lui
																			// associe
																			// un
																			// background
																			// personalisé
		}

		// Ajouter les Images aux Layouts concernés

		// Instancier un Layoutparams pour configuer l'image a trouver
		LinearLayout.LayoutParams paramImageATrouver = new LinearLayout.LayoutParams(
				LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
		layoutImageATrouver.addView(imageATrouver, paramImageATrouver);
		imageATrouver.setPadding(15, 20, 15, 20);
		layoutImageATrouver.setPadding(15, 20, 15, 20);

		// Instancier un Layoutparams pour configuer les drapeaux
		LinearLayout.LayoutParams paramDrapeau = new LinearLayout.LayoutParams(
				LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); // new
																		// LinearLayout.LayoutParams(width/3,
																		// height/7);
																		// //new
																		// LinearLayout.LayoutParams(width/3,
																		// height/7);
		paramDrapeau.weight = 1;
		paramDrapeau.setMargins(10, 10, 10, 10);

		// On commence par les deux premiers drapeau
		layoutDrapeau1.addView(tableauDrapeau[0], paramDrapeau);
		layoutDrapeau1.addView(tableauDrapeau[1], paramDrapeau);

		// Ensuite les autres
		layoutDrapeau2.addView(tableauDrapeau[2], paramDrapeau);
		layoutDrapeau2.addView(tableauDrapeau[3], paramDrapeau);

		// Ajouter couleur de fond

		// Pour l'image a trouver
		imageATrouver.setBackgroundResource(R.drawable.background_neutre);

	}

	public void initListener() {
		for (int i = 0; i < tableauDrapeau.length; i++) {
			tableauDrapeau[i].setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					// On prend d'abord le tag de l'image selectionnée
					String tagDrapeau = (String) v.getTag();

					drapeauSelectionne = Integer.parseInt(tagDrapeau);

					if (drapeauSelectionne == idDrapeauAtrouver) {
						imageResultat.setImageResource(R.drawable.vrai);
						textResultat.setText(monumentATrouver.getNomMonument()
								+ " - " + monumentATrouver.getPaysMonument());
						// Toast.makeText(getApplicationContext(), "gagné !\n" +
						// monumentATrouver.getNomMonument() + " - " +
						// monumentATrouver.getPaysMonument(),
						// Toast.LENGTH_LONG).show();
						// on incrimente le score
						partie.ajouterScore();

						v.setBackgroundResource(R.drawable.background_vrai);
						imageATrouver
								.setBackgroundResource(R.drawable.background_vrai);
					} else {
						imageResultat.setImageResource(R.drawable.faux);
						textResultat.setText(monumentATrouver.getNomMonument()
								+ " - " + monumentATrouver.getPaysMonument());
						// Toast.makeText(getApplicationContext(), "perdu !\n" +
						// monumentATrouver.getNomMonument() + " - " +
						// monumentATrouver.getPaysMonument(),
						// Toast.LENGTH_LONG).show();
						v.setBackgroundResource(R.drawable.background_faux);
						imageATrouver
								.setBackgroundResource(R.drawable.background_faux);
					}

					// ImageView image = (ImageView)
					// toastResultat.findViewById(R.id.imageAtrouver);
					// image.setImageResource(imageATrouver.getId());

					Toast toast = new Toast(MainActivity.this);

					toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
					toast.setDuration(Toast.LENGTH_LONG);
					toast.setView(toastResultat);

					toast.show();

					// on incremente le nombre de tentative
					nbrTentatives++;

					// On teste si on peut encore jouer
					if (nbrTentatives < Partie.getNOMBRE_TENTATIVE()) {

						// on cree un compteur pour attendre un laps de temps
						new CountDownTimer(3000, 1000) {

							@Override
							public void onTick(long miliseconds) {
							}

							@Override
							public void onFinish() {
								// On initialise d'abord les background
								tableauDrapeau[drapeauSelectionne]
										.setBackgroundResource(R.drawable.background_neutre);
								imageATrouver
										.setBackgroundResource(R.drawable.background_neutre);
								// apres 5 secondes on passe a l'autre image
								jouer();
							}
						}.start();
					}
					// sinon on affiche le score
					else {
						Toast.makeText(getApplicationContext(),
								"Votre score est " + partie.affichierScore(),
								Toast.LENGTH_LONG).show();
					}
				}
			});

		}
	}

	public void jouer() {
		// choix du monument et des drapeaux
		monumentATrouver = partie.choisirMonument();
		ArrayList<Integer> listDrapeau = partie.selectDrapeau();

		Log.d("monument a trouver", monumentATrouver.toString());

		// Mise des images dans l'interface

		// on commence par l'image a trouver
		int id = getResources().getIdentifier(
				"m" + monumentATrouver.getIdMoument(), "drawable",
				getApplicationContext().getPackageName());
		imageATrouver.setImageResource(id);

		// ensuite les drapeaux ( de façon aléatoire seulement pour le drapeau
		// du monument concerné )

		// on commence par le drapeau à trouver
		Random rand = new Random();
		idDrapeauAtrouver = rand.nextInt(4); // on fixe l'id du drapeau
		id = getResources().getIdentifier("d" + monumentATrouver.getIdPays(),
				"drawable", "com.example.quizz");
		tableauDrapeau[idDrapeauAtrouver].setImageResource(id);

		// Toast.makeText(getApplicationContext(), ""+idDrapeauAtrouver,
		// Toast.LENGTH_SHORT).show();

		// puis par les autres drapeaux
		int j = 0;
		for (int i = 0; i < tableauDrapeau.length; i++) {
			if (i != idDrapeauAtrouver) {
				id = getResources().getIdentifier("d" + listDrapeau.get(j),
						"drawable", "com.example.quizz");
				tableauDrapeau[i].setImageResource(id);
				j++;
			}
		}

	}

}
