package cz.agents.agentpolis.darptestbed.simulator.initializator;
import com.google.inject.Injector;
import cz.agents.agentpolis.darptestbed.global.Utils;
import cz.agents.agentpolis.darptestbed.siminfrastructure.communication.dispatching.protocol.DispatchingMessageProtocol;
import cz.agents.agentpolis.darptestbed.siminfrastructure.communication.driver.protocol.DriverCentralizedMessageProtocol;
import cz.agents.agentpolis.darptestbed.siminfrastructure.communication.driver.protocol.DriverMessageProtocol;
import cz.agents.agentpolis.darptestbed.siminfrastructure.communication.passenger.protocol.PassengerMessageProtocol;
import cz.agents.agentpolis.darptestbed.siminfrastructure.communication.protocol.GeneralMessageProtocol;
import cz.agents.agentpolis.darptestbed.siminfrastructure.communication.requestconsumer.protocol.RequestConsumerMessageProtocol;
import cz.agents.agentpolis.darptestbed.siminfrastructure.logger.RequestLogger;
import cz.agents.agentpolis.darptestbed.siminfrastructure.planner.TestbedPlanner;
import cz.agents.agentpolis.darptestbed.simmodel.agent.activity.movement.TestbedPassengerActivity;
import cz.agents.agentpolis.darptestbed.simmodel.agent.dispatching.logic.DispatchingLogic;
import cz.agents.agentpolis.darptestbed.simmodel.agent.driver.logic.DriverCentralizedLogic;
import cz.agents.agentpolis.darptestbed.simmodel.agent.driver.logic.DriverDecentralizedLogic;
import cz.agents.agentpolis.darptestbed.simmodel.agent.driver.logic.DriverLogic;
import cz.agents.agentpolis.darptestbed.simmodel.agent.driver.logic.DriverLogicWithPassengerMessageProtocol;
import cz.agents.agentpolis.darptestbed.simmodel.agent.passenger.PassengerProfile;
import cz.agents.agentpolis.darptestbed.simmodel.agent.passenger.logic.PassengerCentralizedLogic;
import cz.agents.agentpolis.darptestbed.simmodel.agent.passenger.logic.PassengerDecentralizedLogic;
import cz.agents.agentpolis.darptestbed.simmodel.agent.passenger.logic.PassengerLogicWithRequestConsumerMessageProtocol;
import cz.agents.agentpolis.darptestbed.simmodel.entity.vehicle.TestbedVehicle;
import cz.agents.agentpolis.darptestbed.simmodel.environment.model.TestbedModel;
import cz.agents.agentpolis.darptestbed.simmodel.environment.model.TestbedVehicleStorage;
import cz.agents.agentpolis.simmodel.agent.activity.TimeSpendingActivity;
import cz.agents.agentpolis.simmodel.agent.activity.movement.DriveVehicleActivity;
import cz.agents.agentpolis.simmodel.environment.model.citymodel.transportnetwork.AllNetworkNodes;
import cz.agents.agentpolis.simmodel.environment.model.query.AgentPositionQuery;
public interface LogicConstructor {
PassengerLogicWithRequestConsumerMessageProtocol
constructPassengerLogic(String agentId,
RequestConsumerMessageProtocol sender,
DriverMessageProtocol driverMessageProtocol,
GeneralMessageProtocol
generalMessageProtocol,
TestbedModel taxiModel,
AgentPositionQuery positionQuery, Utils utils,
PassengerProfile passengerProfile,
TestbedPassengerActivity passengerActivity,
TimeSpendingActivity timeSpendingActivity,
RequestLogger logger);
boolean usesDispatching();
DispatchingLogic constructDispatchingLogic(String dispatching, PassengerMessageProtocol sender,
DriverCentralizedMessageProtocol driverCentralizedMessageProtocol,
GeneralMessageProtocol generalMessageProtocol,
TestbedModel taxiModel, AgentPositionQuery positionQuery,
AllNetworkNodes allNetworkNodes, Utils utils, TestbedPlanner pathPlanner,
TestbedVehicleStorage vehicleStorage);
DriverLogicWithPassengerMessageProtocol
constructDriverLogic(String agentId, PassengerMessageProtocol sender,
GeneralMessageProtocol
generalMessageProtocol,
TestbedModel taxiModel,
AgentPositionQuery positionQuery,
AllNetworkNodes allNetworkNodes, Utils utils,
TestbedVehicle vehicle,
DriveVehicleActivity drivingActivity,
Injector injector);
}