package form.run;

import form.io.*;
import java.lang.*;
import java.io.*;

public class RunProg {

	private String localDir;
	private String remoteDir;
	private PrintWriter out;
	private BufferedReader in;

	RunProg(String outDir){

		localDir = outDir;
		remoteDir = CGIReceiver.getTime()+"/";

	}

	private String insertPass(String pass,String data){

		pass = pass.substring(1);
		String id="";
		String rest="";
		int start;
		int end;
		while (pass!=null){
			//parse one id
			start = pass.indexOf("=");
			end = pass.indexOf("&");
			id = pass.substring(start+1,end);
			pass = pass.substring(end+1);

			//user
			start = pass.indexOf("=");
			end = pass.indexOf("&");
			rest = pass.substring(start+1,end);
			pass = pass.substring(end+1);

			//pass
			start = pass.indexOf("=");
			end = pass.indexOf("&");
			rest += " "+pass.substring(start+1,end);
			pass = pass.substring(end+1);

			//host
			start = pass.indexOf("=");
			end = pass.indexOf("&");
			if (end >0){
				rest += " "+pass.substring(start+1,end);
				pass = pass.substring(end+1);
			}
			else {
				rest += " "+pass.substring(start+1);
				pass = null;
			}


			//replace passwords
			start = data.indexOf("$"+id);
			String temp;
			while(start > 0){
				temp = data.substring(0,start);
				data = temp+rest+data.substring(start+1+id.length());
				start = data.indexOf("$"+id);
			}

		}

		return data;
	}

	public void remote(String sshScriptDir,String script,String passwords){
		String data = ReadFiles.readFile(script);
		String line;
		String type;
		int next;

		Runner runner;

		data = insertPass(passwords,data);

		while (data != null){

			if(data.indexOf("\n") >1){
				line = data.substring(0,data.indexOf("\n"));
				data = data.substring(data.indexOf("\n")+1);
			}else {
				line = data;
				data = null;
				break;
			}

			if(line.toUpperCase().startsWith("S")){
				runner = new SSHRunner(sshScriptDir);
			}
			else {// if(line.toUpperCase().startsWith("L"))
				runner = new LocalRunner();
			}
		
			//remove the first letter of the line
			next = min (line.indexOf(" "),line.indexOf("\t"),line.length());
			type = line.substring(1,next);
			line = line.substring(next+1);


			if(type.toUpperCase().startsWith("PUT")){
				runner.put(line,localDir,remoteDir);
			}
			else if (type.toUpperCase().startsWith("GETD")){
				runner.getd(line,localDir,remoteDir);
			}
			else if (type.toUpperCase().startsWith("GET")){
				runner.get(line,localDir,remoteDir);
			}
			else if (type.toUpperCase().startsWith("RUN")){
				runner.execute(line,localDir,remoteDir);
			}
		}
	}

	private int min(int a, int b,int c){
		int next =a;
		if (next <0)
			next = b;
		if ( (b>=0) && (b >next) )
			next =b;
		if (next < 0 ) next = c;

		return next;
	}

	public void local(String script){
		String inline;

		String execute = "/www/jwave/cgi-bin/local.sh";
		try {
			Process n = Runtime.getRuntime().exec(execute+" "+localDir+" "+script);
			n.waitFor();
		} catch(java.io.IOException e){ e.printStackTrace();}
		catch(java.lang.InterruptedException e){ e.printStackTrace();}
		catch(java.lang.SecurityException e){ e.printStackTrace();}
	}
}

