package net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors;

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;

import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;
import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.NetworkAPIListener;
import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.Response;

public abstract class AbstractRequestExecutor {
	
	protected PandacraftUtils plugin = PandacraftUtils.getInstance();
	
	
	
	public final String command;
	
	
	public AbstractRequestExecutor(String cmd) {
		command = cmd.toLowerCase();
		NetworkAPIListener.getInstance().registerRequestExecutor(command, this);
	}
	
	
	
	public void execute(String data, Socket socket) throws IOException {
		if (socket == null || socket.isClosed() || socket.isOutputShutdown()) throw new IllegalArgumentException("le socket doit être non null et doit être ouvert sur le flux d'entrée");
		
		
		Response rep = run(data);
		
		
		
		rep.sendPacket(new PrintStream(socket.getOutputStream()));
		
	}
	
	
	/**
	 * 
	 * @param data La représentation sous forme de String des données envoyés dans la requête
	 * @return La réponse à retourner au client
	 */
	protected abstract Response run(String data);
	
	
}
