package com.poseidon.jambi.juic;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.Execute;

import java.io.File;
import java.io.IOException;

/**
 * Ant target to compile all jui files to java files
 *
 * @author Børge Nygaard Austvold
 */
public class JuicAntTask extends Task {

    private String src;
    private String compiler;
    private String jui = null;

    public void execute() throws BuildException {

        if (System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0) {
            compiler = compiler + ".exe";
        }

        DirectoryScanner scanner = new DirectoryScanner();

        File file = super.getProject().resolveFile(src);
        scanner.setBasedir(file);
        boolean compileAll = jui == null || jui.equalsIgnoreCase("all");
        scanner.setIncludes(new String[]{"**/*.jui"});
        scanner.scan();
        String[] strings = scanner.getIncludedFiles();
       // System.out.println(jui +"..?");

        if(compileAll){
            for (String string : strings) {
                compileOne(string);
            }
        }else{
            String filestring = "";
            for(int i = 0; i < strings.length; i++){
                if(strings[i].contains(jui)){
                    filestring = strings[i];
                    break;
                }
            }
            compileOne(filestring);    
        }
    }

    public void compileAll(String[] strings){

    }

    private void compileOne(String string){
     //   System.out.println("compile " + string);
        File juiFile = new File(src, string);


            if (!juiFile.exists()) {
                throw new BuildException("Not found");
            }
           // System.out.println("JUIname= "+ juiFile.getName());
            Execute execute = new Execute();
            int pos = string.lastIndexOf("\\");
            if (pos < 0) {
                pos = string.lastIndexOf("/");
            }
            String pack = string.substring(0, pos);

            pack = pack.replace("\\", ".");
            pack = pack.replace("/", ".");
            execute.setCommandline(new String[]{
                    compiler, "-d", src, "-p", pack, juiFile.getAbsolutePath()});


            try {
              //   System.out.println("JUIpath= "+ juiFile.getAbsolutePath());
                execute.execute();
            } catch (IOException e) {
                throw new BuildException(e);
            }
    }
    public String getSrc() {
        return src;
    }

    public void setSrc(String src) {
        this.src = src;
    }

    public String getCompiler() {
        return compiler;
    }

    public void setCompiler(String compiler) {
        this.compiler = compiler;
    }

    public void setJui(String file){
        this.jui = file;
    }

    public String getMessage(){
        return this.jui;
    }
}
