import TestGenerator2;
import RunSchemeTest2;
import ComparisonChecker2;
import OutputFormatter2;
import java.io.*;
import java.util.*;
import java.lang.Exception.*;

/**We will need to import the class of GUI, Terminal
 *Interface, Test Case Generator, Comparison Checker, 
 *Authority Program, User Program Object, Comparison 
 *Checker, and Output Formatter Object.
 */

public class Coordinator2{
    public void dostuff (String username,
                         double lab,
                         String userProgram,
                         String testFile,
                         SchemeTesterInterface2 target) 
                throws Exception {

        SimpleOutput out = new SimpleOutput ();
        out.println ("Coordinator2::dostuff called with parameters");
        out.println ("     username:  " + username);
        out.println ("     lab number:  " + lab);
        out.println ("     user program name:  " + userProgram);
        out.println ("     special test file:  " + testFile);
        out.println ("     reference to ternimal interface");

        String authorityProgram = "/home/walker/152/project.s01/test1.ss";
            String fileNameForRegTests = "/home/walker/152/project.s01/proj-testCases2";
        out.println ("Coordinator2 will use:" );
        out.println ("     " + authorityProgram + " as authority program");
        out.println ("     " + fileNameForRegTests + " as file name for regular tests");
        out.println ("     level 3 as the desired correctness level");
        out.println ("     special test cases will be ignored");

        TestGenerator2 testcasegenerator1 
            = new TestGenerator2(fileNameForRegTests);
        TestGenerator2 testcasegenerator2
            = new TestGenerator2(testFile);
        out.println ("     test generator created");
        RunSchemeTest2 firstrunscheme 
            = new RunSchemeTest2(authorityProgram, 5, 500);
        out.println ("     authority program created");
        RunSchemeTest2 secondrunscheme 
            = new RunSchemeTest2(userProgram, 5, 500);
        out.println ("     user program created");
        ComparisonChecker2 compChecker = new ComparisonChecker2();
        out.println ("     comparison checker created");
        OutputFormatter2 firstoutputformatter = new OutputFormatter2(target, 3);
        out.println ("     output formatter created");

        OurSinglyLinkedList2 testList = new OurSinglyLinkedList2();
        OurSinglyLinkedList2 authList = new OurSinglyLinkedList2();
        OurSinglyLinkedList2 userList = new OurSinglyLinkedList2();
        OurSinglyLinkedList2 corrList = new OurSinglyLinkedList2();

        String testcase;
        String authorityResult;
        String userResult;
        String compResult = "";
        
        // run regular tests; ignore special tests
        while ((testcase = testcasegenerator1.getTestCase()).compareTo("notestcases") != 0) {
            out.println ("Coordinator2:  running test case:  " + testcase);
            testList.add(testcase);
            // Get the authority result
            authorityResult = firstrunscheme.runTest(testcase);
            authList.add(authorityResult);
            // Get the user's results
            userResult = secondrunscheme.runTest(testcase);
            userList.add(userResult);
            // Compare results
            compResult = new Integer 
                (compChecker.compareResults(authorityResult, userResult)).toString();
            corrList.add(compResult);
            }//while

        firstoutputformatter.genOutput(testList, authList, userList, corrList);

    }// dostuff(lots of variables)

}//class Coordinator

