<?xml version="1.0" encoding="UTF-8"?>

<project name="athena-project-build" default="deploy">

  <!-- Load Tasks -->
  <taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
      <pathelement location="${wpilib.ant.dir}/ant-contrib.jar"/>
    </classpath>
  </taskdef>
  <taskdef resource="net/jtools/classloadertask/antlib.xml" classpath="${classloadertask.jar}"/>
  <classloader loader="system" classpath="${jsch.jar}"/>

  <target name="clean" description="Clean up all build and distribution artifacts.">
    <delete dir="${build.dir}"/>
    <delete dir="${dist.dir}"/>
  </target>

  <!-- Targets -->

  <target name="get-target-ip">
    <math result="ip.upper" operand1="${team-number}" operation="/" operand2="100" datatype="int"/>
    <math result="ip.lower" operand1="${team-number}" operation="%" operand2="100" datatype="int"/>
    <property name="target" value="10.${ip.upper}.${ip.lower}.2" />
     <echo>Target IP: ${target}</echo>
  </target>
  
  <target name="compile" description="Compile the source code.">
    <mkdir dir="${build.dir}"/>
    <echo>[athena-compile] Compiling ${src.dir} with classpath=${classpath} to ${build.dir}</echo>
    
    <javac srcdir="${src.dir}"
     destdir="${build.dir}"
     includeAntRuntime="no"
     includeJavaRuntime="no"
     classpath="${classpath}"
     target="1.7"
     source="1.7"
     compiler="javac1.7"
     debug="true">
    </javac>
  </target>
  
  <target name="jar" depends="compile">
    <echo>[athena-jar] Making jar ${dist.jar}.</echo>
    <mkdir dir="${dist.dir}" />
    <mkdir dir="${build.jars}" />

  <echo>[athena-jar] Copying jars from ${classpath} to ${build.jars}.</echo>
  <copy todir="${build.jars}" flatten="true">
    <path>
    <pathelement path="${classpath}"/>
    </path>
  </copy>
  
    <jar destfile="${dist.jar}" update="false">
      <manifest>
    	<attribute name="Main-Class" value="edu.wpi.first.wpilibj.RobotBase"/>
    	<attribute name="Robot-Class" value="${robot.class}"/>
    	<attribute name="Class-Path" value="."/>
      </manifest>
    
      <fileset dir="${build.dir}" includes="**/*.class"/>
      
    <zipgroupfileset dir="${build.jars}">
      <include name="**/*.jar" />
    </zipgroupfileset>
    </jar>
  </target>

  <target name="deploy" depends="get-target-ip,jar" description="Deploy the jar and start the program running.">
    <echo>[athena-deploy] Copying code over.</echo>
    <scp file="${dist.jar}" todir="${username}@${target}:${deploy.dir}"
   password="${password}" trust="true"/>
    <scp file="${wpilib.ant.dir}/runjavaprogram" todir="${username}@${target}:${deploy.dir}"
   password="${password}" trust="true"/>
    <echo>[athena-deploy] Starting program.</echo>
    <sshexec host="${target}"
       username="${username}"
       password="${password}"
       trust="true"
       command="chmod a+x run*program; ${deploy.run.command}"/>
  </target>

  <target name="debug-deploy" depends="get-target-ip,jar" description="Deploy the jar and start the program running in debug mode.">
    <echo>[athena-debug-deploy] Copying code over.</echo>
    <scp file="${dist.jar}" todir="${username}@${target}:${deploy.dir}"
   password="${password}" trust="true"/>
   <echo>[athena-debug-deploy] Copying Debug Script Over.</echo>
   <scp file="${wpilib.ant.dir}/debugjavaprogram" todir="${username}@${target}:${deploy.dir}"
   password="${password}" trust="true"/>
    <echo>[athena-debug-deploy] Starting program.</echo>
    <sshexec host="${target}"
       username="${username}"
       password="${password}"
       trust="true"
       command="chmod a+x debug*program; ${deploy.debug.command}"/>
  </target>

  <!-- Simulate -->
  <target name="jar-for-simulation" depends="compile">
	<echo>[jar-for-simulation] Building jar.</echo>
	
	<jar destfile="${simulation.dist.jar}">
	  <manifest>
		<attribute name="Built-By" value="${user.name}"/>
		<attribute name="Robot-Class" value="${robot.class}"/>
		<attribute name="Main-Class" value="edu.wpi.first.wpilibj.RobotBase"/>
	  </manifest>
	  <fileset dir="${build.dir}" />
	  <zipgroupfileset dir="${wpilib.sim.lib}">
	  	<include name="**/*.jar" />
	  </zipgroupfileset>
	</jar>
  </target>

  <target name="simulate" depends="jar-for-simulation">
    <parallel>
      <sequential>
	    <echo>[simulate] Running Gazebo.</echo>
	    <exec executable="frcsim">
	      <arg value="${simulation.world.file}"/>
	    </exec>
      </sequential>
      <sequential>
	    <echo>[simulate] Running DriverStation.</echo>
	    <java jar="${wpilib.sim.tools}/SimDS.jar" fork="true">
          <jvmarg value="-Djava.library.path=${wpilib.sim.lib}" />
        </java>
      </sequential>
      <sequential>
	    <echo>[simulate] Running Code.</echo>
	    <java jar="${simulation.dist.jar}" fork="true">
          <jvmarg value="-Djava.library.path=${wpilib.sim.lib}" />
        </java>
      </sequential>
    </parallel>
  </target>

  <target name="debug-simulate" depends="jar-for-simulation">
    <parallel>
      <sequential>
	    <echo>[debug-simulate] Running Gazebo.</echo>
	    <exec executable="frcsim">
	      <arg value="${simulation.world.file}"/>
	    </exec>
      </sequential>
      <sequential>
	    <echo>[debug-simulate] Running DriverStation.</echo>
	    <java jar="${wpilib.sim.tools}/SimDS.jar" fork="true">
          <jvmarg value="-Djava.library.path=${wpilib.sim.lib}" />
        </java>
      </sequential>
      <sequential>
	    <echo>[debug-simulate] Running Code.</echo>
	    <java jar="${simulation.dist.jar}" fork="true">
          <jvmarg value="-Xdebug" />
          <jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8348" />
          <jvmarg value="-Djava.library.path=${wpilib.sim.lib}" />
        </java>
      </sequential>
    </parallel>
  </target>
</project>
