package system;


import jade.MicroBoot;
import jade.core.Agent;
import jade.core.MicroRuntime;

import java.util.ArrayList;

/**
 * Klasa odpowiedzialna za tworzenie i zarządzanie dzielonymi kontenerami,
 * tworzeniem w nich i usuwaniem agentów oraz wszystkim co związane z platformą
 * JADE.
 * 
 * @author Mateusz Kaflowski <mkaflowski@gmail.com>
 */
public class JadeManager {

	/** Imię agenta. */
	private static String agentName;
	/** Lista wszystkich agentów działających w systemie. */
	private static ArrayList<Agent> agents = new ArrayList<>();

	/**
	 * Uruchamia JADE runtime.
	 * 
	 * @param params
	 *            parametry
	 */
	public void startRuntime(String[] params) {
		MicroBoot.main(params);
	}

	/**
	 * Zatrzymuje JADE runtime.
	 */
	public void killRuntime() {
		MicroRuntime.stopJADE();
	}

	/**
	 * Tworzenie nowego agenta w platformie.
	 * 
	 * @param name
	 *            nazwa agent
	 */
	public void startAgent(String name) {
		this.agentName = name;
		try {
			MicroRuntime.startAgent(agentName,
					"system.ClientAgent", null);
		} catch (Exception e) {
			System.out.println("Blad logowania");
		}
	}


	/**
	 * Dodaje agent do kolekcji wszystkich agentów w systemie.
	 * @param agent
	 */
	public static void addAgentToCollection(Agent agent) {
		agents.add(agent);
	}

	/**Zamyka wszystkich agentów w systemie*/
	public static void deletaAllAgents() {
		for (Agent agent : agents) {
			agent.doDelete();
			System.out.println("Deleting agent " + agent.getLocalName() + ".");
		}
	}


}
