package form.run;

import java.lang.*;
import java.io.*;
import java.util.*;


public class SSHRunner implements Runner{

	private String sshScriptDir;
	private String user;
	private String pass;
	private String host;
	private static final String ssh = "ssh.exp";
	private static final String scp = "scp.exp";

	public SSHRunner(String sshloc){
		sshScriptDir = sshloc;
	}

	private String setStuff(String line){

		StringTokenizer s = new StringTokenizer(line);
		String newline = "";

		user = s.nextToken();
		pass = s.nextToken();
		host = s.nextToken();

		while (s.hasMoreTokens()){

			newline +=" "+s.nextToken();
		}

		return newline;
	}


	public void execute(String line,String localDir, String remoteDir){


		line = setStuff(line);
		sshHelper(line,remoteDir);
	}

	private void sshHelper(String line,String remoteDir){

		try {
			String cmd = sshScriptDir+ssh;
			String[] env = new String[5];
			env[0] ="PASSWORD="+pass;
			env[1] ="COMMAND="+line;
			env[2] ="USER="+user;
			env[3] ="HOST="+host;
			env[4] ="REMOTEDIR="+remoteDir;
			System.out.println("Running "+cmd);
			Process n = Runtime.getRuntime().exec(cmd,env);
			ReadThread a = new ReadThread(n.getInputStream());
			ReadThread b = new ReadThread(n.getErrorStream());
			a.start();
			b.start();
			n.waitFor();
		} catch(java.io.IOException e){ e.printStackTrace();}
		catch(java.lang.InterruptedException e){ e.printStackTrace();}
	}


	public void put(String line, String localDir, String remoteDir){
		//System.out.println("put "+line+","+localDir+","+remoteDir);
		line = setStuff(line);
		StringTokenizer s = new StringTokenizer(line);

		//make the directory off the home directory
		sshHelper("mkdir "+remoteDir,"~");

		String source = "";
		String curr ;
		while (s.hasMoreTokens()){
			curr= s.nextToken();
			if (!curr.startsWith("/"))
				source += " "+localDir+"/"+curr;
			else
				source += " "+curr;
		}
		
		source = localDir+"/";
		String file;

		String destination = user+"@"+host+":"+remoteDir;
		System.out.println("soure"+source);
		System.out.println("dest"+destination);
		copy(source,destination,localDir);

	}

	public void get(String line, String localDir, String remoteDir){

		line = setStuff(line);

		String source = user+"@"+host+":"+remoteDir;
		String destination = localDir;
		copy(source,destination,localDir);

	}

	public void getd(String line, String localDir, String remoteDir){
		get(line,localDir,remoteDir);
		sshHelper("rm -rf "+remoteDir,"~");
	}

	private void copy(String source, String destination,String localDir){

		try {
			String cmd = sshScriptDir+scp;
			String[] env = new String[7];
			env[0] ="PASSWORD="+pass;
			env[1] ="USER="+user;
			env[2] ="HOST="+host;
			env[3] = "SOURCE="+source;
			env[4] = "DEST="+destination;
			env[5] = "PASSWORD="+pass;
			env[6] = "PWD="+localDir;
			System.out.println(cmd);
			Process n = Runtime.getRuntime().exec(cmd,env);
			ReadThread a = new ReadThread(n.getInputStream());
			ReadThread b = new ReadThread(n.getErrorStream());
			a.start();
			b.start();
			n.waitFor();
		} catch(java.io.IOException e){ e.printStackTrace();}
		catch(java.lang.InterruptedException e){ e.printStackTrace();}

	}

}
