import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.Arrays;
import javax.swing.JOptionPane;

/**
 * Write a description of class Fight here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Fight extends Map_World
{

	/**
	 * Constructor for objects of class Fight.
	 * 
	 */
	Province offenderProvince;
	Province defenderProvince;
	String maxDiceOffender = "";
	String maxDiceDefender = "";

	public Fight(String[] playerList, int[] colorList)
	{
		super(playerList,colorList);

	}

	public void test()
	{
		provinces[1].setEntityCount(10);
		provinces[2].setEntityCount(20);
		provinces[1].setOwner(1);
		provinces[2].setOwner(2);
		provinces[1].redrawProvince();
		provinces[2].redrawProvince();

	}

	public void act()
	{
		if(offenderProvince == null)
		{

			OffenderProvince();
		}
		else
		{
			defenderProvince();
		}
	}

	private void OffenderProvince()
	{
		for ( int i = 1; i <= provinceCount; i++)
		{
			if (provinces[i].hasClicked() == true)
			{   
				offenderProvince = provinces[i];
				// System.out.println("Die Provinz " + provinces[i].getDisplayName() + " wurde als angreifende Provinz ausgewählt! Sie gehört Spieler" + provinces[i].getOwner());                
			}
		}
	}

	private void defenderProvince()
	{
		{
			for (int i = 1; i <= provinceCount; i++)
			{
				if (provinces[i].hasClicked() == true)//&& defenderProvince != offenderProvince)
				{
					defenderProvince = provinces[i];
					// System.out.println("Die Provinz " + provinces[i].getDisplayName() + " wurde als verteidigende Provinz ausgewählt! Sie gehört Spieler" + provinces[i].getOwner()); 
					chooser();                
					break;
				} 
			}
		}
	}

	private void chooser()
	{
		System.out.println("Es wird gewürfelt!");        
		Dice_Offender diceOffender = new Dice_Offender();
		// System.out.println("Der Angreifer ereichte folgende Würfelzahlen:"); 
		int[] maxDiceOffenderArray = diceOffender.dice_offender(offenderProvince.getEntityCount());
		Dice_Defender diceDefender = new Dice_Defender();
		// System.out.println("Der Verteidiger ereichte folgende Würfelzahlen:");
		int[] maxDiceDefenderArray = diceDefender.dice_defender(defenderProvince.getEntityCount());
		Arrays.sort(maxDiceOffenderArray);
		Arrays.sort(maxDiceDefenderArray);

		for(int i = 0;i<3;i++)
		{
			if(i == 0)
			{
				maxDiceOffender = "" + maxDiceOffenderArray[i];
			}
			else
			{
				maxDiceOffender = maxDiceOffender + ";" + maxDiceOffenderArray[i];
			}
		}
		for(int i = 0;i<2;i++)
		{
			if(i == 0)
			{
				maxDiceDefender = "" + maxDiceDefenderArray[i];
			}
			else
			{
				maxDiceDefender = maxDiceDefender + ";" + maxDiceDefenderArray[i];
			}

		}
		JOptionPane.showMessageDialog(null,"Es wurde gewürfelt. Der Angreifer erreichte folgende Würfelzahlen: " + maxDiceOffender + "\n Der Verteidiger erreichte diese Würfelzahlen: " + maxDiceDefender);
		diceOffender = null;
		diceDefender = null;
		decider(maxDiceOffenderArray, maxDiceDefenderArray);
	}

	private void decider(int[] maxDiceOffender, int [] maxDiceDefender)
	{

		int maxDefender = maxDiceDefender[1];
		int maxOffender = maxDiceOffender[2];
		if (maxOffender > maxDefender && defenderProvince.getEntityCount()>1)
		{
			int EntitiesOffender = offenderProvince.getEntityCount();
			int EntitiesDefender = defenderProvince.getEntityCount();
			defenderProvince.setEntityCount(EntitiesDefender - 1);
			JOptionPane.showMessageDialog(null,"Somit gewinnt der Angreifer (Spieler " + offenderProvince.getOwner() + ").Dem Verteidiger (Spieler " + defenderProvince.getOwner() +  ") wird eine Einheit abgezogen. Er hat nun noch " + defenderProvince.getEntityCount() + " Einheiten");

		}

		if (maxOffender < maxDefender && offenderProvince.getEntityCount()>1)
		{
			int EntitiesOffender = offenderProvince.getEntityCount();
			int EntitiesDefender = defenderProvince.getEntityCount();
			offenderProvince.setEntityCount(EntitiesOffender - 1);
			JOptionPane.showMessageDialog(null,"Somit gewinnt der Verteidiger (Spieler " + defenderProvince.getOwner() + ").Dem Angreifer (Spieler " + defenderProvince.getOwner() +  ") wird eine Einheit abgezogen. Er hat nun noch " + offenderProvince.getEntityCount() + " Einheiten");            
		}

		if (maxOffender == maxDefender && offenderProvince.getEntityCount()>1)
		{
			int EntitiesOffender = offenderProvince.getEntityCount();
			int EntitiesDefender = defenderProvince.getEntityCount();
			offenderProvince.setEntityCount(EntitiesOffender - 1);
			JOptionPane.showMessageDialog(null,"Da es unentschieden ist, gewinnt der Verteidiger (Spieler " + defenderProvince.getOwner() + ").Dem Angreifer (Spieler " + defenderProvince.getOwner() +  ") wird eine Einheit abgezogen. Er hat nun noch " + offenderProvince.getEntityCount() + " Einheiten");
		}

		if (maxOffender>maxDefender && defenderProvince.getEntityCount()==1)
		{
			defenderProvince.setOwner(offenderProvince.getOwner());
			defenderProvince.setEntityCount(0);
			JOptionPane.showMessageDialog(null,"Somit gewinnt der Angreifer (Spieler " + offenderProvince.getOwner() + "). Die Provinz gehört fortan dem Angreifer (" + offenderProvince.getOwner() + ")");
		}
		offenderProvince = null;
		defenderProvince = null;

	}
}

//Ein <3 für Felix (von Aaron)(geschrieben von Samuel)(aber Aaron wollte das ich des schreib)
