package src.juego;
import java.util.ArrayList;
import java.util.Random;		
import java.awt.Color;
import java.awt.Image;
import java.awt.Point;
import javax.swing.ImageIcon;

import entorno.*;


public class Juego extends InterfaceJuego
{
	private Entorno entorno;
	Image Fondo;
	Image HormiDelta;
	Random gen = new Random();
	ArrayList <Hormiguero> Delta = new ArrayList<Hormiguero>();
	ArrayList <Hormiguero> Omega = new ArrayList<Hormiguero>();
	ArrayList <Hormiguero> Neutral = new ArrayList<Hormiguero>();
	ArrayList <Point> Ubicaciones = new ArrayList <Point>();
	boolean BAN=true;
	int Contador = 0;
	Insecticida Raid = new Insecticida();
	Hormiguero Aux;
	int hormicont = 0;

	Juego()
	{
		// Inicializa el objeto entorno, pero aun no lo inicia.
		
		entorno = new Entorno(this, "Guerra de Hormigas - Versin 0.01", 800, 600);	
		Fondo = Herramientas.cargarImagen("FONDO.png");
			
		
		Delta.add(new Hormiguero(1));
		Delta.get(0).dibujarse(entorno, 1); // Obtiene el primer elemento del arrays Delta

		Ubicaciones.add(new Point(Delta.get(0).x,Delta.get(0).y));
		Omega.add(new Hormiguero(2));
		Ubicaciones.add(new Point(Omega.get(0).x,Omega.get(0).y));
		
		
	//////////////////SUPERPUESTO?????///////////////////////////////////
		int count = 0;
		boolean estaSuperpuesto = false;   //para fijarme si el punto que cree esta superpuesto con alguno q ya habia
		int cantidadNeutrales = gen.nextInt(10) + 1;
		while (count < cantidadNeutrales){	//mientras no haya colocado todos los hormigueros neutrales
			//System.out.println(count);   // para testeo
			//System.out.println(cantidadNeutrales); //para testeo
			Aux = new Hormiguero(0); //creo un hormiguero auxiliar, si no esta superpuesto lo agrego a los neutrales
			Point p = new Point (Aux.getX(), Aux.getY()); //posicion del hormiguero que acabo de crear
			for (int i=0; i<Ubicaciones.size();i++) {
				if (p.distance(Ubicaciones.get(i))<100){ //funcion q calcula la distancia entre dos puntos
					//System.out.println((p.distance(Ubicaciones.get(i)))); //para testeo
					estaSuperpuesto = true;					
				}
			}
			if (!estaSuperpuesto){				//si no esta superpuesto a ninguno, lo agrego
				Neutral.add(Aux);
				Ubicaciones.add(p);
				count++;				
			}
			estaSuperpuesto = false;
		}
		
	//////////////////////////////////////////////////////////	
		
		
		/* 
		 * Es fundamental que recin al final del constructor de la clase Juego se 
		 * inicie el objeto entorno de la siguiente manera.
		 */
		entorno.iniciar();
	}

	/*
	 * Durante el juego, el mtodo tick() ser ejecutado en cada instante y 
	 * por lo tanto es el mtodo ms importante de esta clase. Aqu se debe 
	 * actualizar el estado interno del juego para simular el paso del tiempo 
	 * (ver el enunciado del TP para mayor detalle).
	 */
	
	public void tick()
	
	{
		entorno.dibujarImagen(Fondo, 100, 100, 0, 2.1);
		
		////////////DIBUJAR ACTUALIZAR ENTORNO //////////////
		for (int D=0; D<Delta.size();D++ )
		{
			Delta.get(D).dibujarse(entorno, 1);
			Delta.get(D).ActualizarNivel();
			if (this.Contador%20==0){
				if (Delta.get(D).Nivel==1)
					Delta.get(D).CantidadHormiga++;
				if (Delta.get(D).Nivel==2){
					Delta.get(D).CantidadHormiga=Delta.get(D).CantidadHormiga+2;
					if(Delta.get(D).CantidadHormiga>=40)
						Delta.get(D).CantidadHormiga=0;}
				if (Delta.get(D).Nivel==3){
					Delta.get(D).CantidadHormiga=Delta.get(D).CantidadHormiga+4;
				if(Delta.get(D).CantidadHormiga>=99)
					Delta.get(D).CantidadHormiga=0;}
				if (Delta.get(D).Nivel==4)
					Delta.get(D).CantidadHormiga=Delta.get(D).CantidadHormiga+8;
			}}
		
		for (int O=0; O<Omega.size();O++ )
		{
			Omega.get(O).dibujarse(entorno, 2);
			Omega.get(O).ActualizarNivel();
			if (this.Contador%20==0){
				if(Omega.get(O).Nivel==1)
					Omega.get(O).CantidadHormiga++;
				if(Omega.get(O).Nivel==2)
					Omega.get(O).CantidadHormiga=Omega.get(O).CantidadHormiga+2;
				if(Omega.get(O).Nivel==3)
					Omega.get(O).CantidadHormiga=Omega.get(O).CantidadHormiga+4;
				if(Omega.get(O).Nivel==4)
					Omega.get(O).CantidadHormiga=Omega.get(O).CantidadHormiga+6;
			}
		
		for (int N=0; N<Neutral.size();N++ )
		{
			Neutral.get(N).dibujarse(entorno, 0);
		}
///////////////INSECTICIDA//////////////////////////		
		Raid.Mover(Contador);
		Raid.dibujarse(entorno);
		//////////////////////////////////////
		
		
		/////Contador///
		this.Contador++;
		}}
		
		//System.out.println(Contador);
		
		
	

	@SuppressWarnings("unused")
	public static void main(String[] args)
	{		
		Juego juego = new Juego();
	}
	
	

	}
	