package metab;
import metab.*;
import java.io.*;
import java.text.*;

class Driver {

    private static NumberFormat setp = new DecimalFormat("000.000");

    public static void get_compute_store(String infile, String outfile) throws IOException, FileNotFoundException {// for use only with orignal test data -
                                                                                                                                // modify appropriately if needs change
        BufferedReader in = new BufferedReader( new FileReader( infile ) );//input filestream
        BufferedWriter out = new BufferedWriter( new FileWriter( outfile ) );//output filestream
        String inputbuffer;
        int numofinputsubsmen = 0, numofinputsubswomen = 0;
        double difference_TBW_M, difference_BAC_M, difference_TBW_F, difference_BAC_F;
        double sigma_TBW_M = 0;//
        double sigma_TBW_F = 0;//          These are used only for our new model
        double sigma_BAC_F = 0;//          Other purposes could be designed if modified
        double sigma_BAC_M = 0;//
        out.write("(sex    obs. BAC   obs. TBW   pred. BAC    pred. TBW)");
        out.newLine();
        out.newLine();
        while ((inputbuffer = in.readLine()) != null){

            char sex_MF = in.readLine().charAt(0);
            int age_in_yrs = Integer.parseInt(in.readLine());
            double h_in_cm = Double.parseDouble(in.readLine());
            double w_in_kg = Double.parseDouble(in.readLine());
            double observed_BAC = Double.parseDouble(in.readLine());
            double observed_TBW = Double.parseDouble(in.readLine());
            Drink [] thedrinks = {new Drink(20,.2 / 0.0295735297, "200 mL of 20% alcohol")};
            NMSubject sub = new NMSubject(age_in_yrs, h_in_cm, sex_MF, w_in_kg, thedrinks,
                        new DrinkTime(12,0,DrinkTime._PM), new DrinkTime(2,0,DrinkTime._PM),
                        "Boba", NMSubject._NO_MEAL | NMSubject._MODERATE_DRINKER | NMSubject._METRIC);
            sub.runModel();
            if (sub.getGender() == 'M'){
                numofinputsubsmen++;
                difference_TBW_M = observed_TBW - sub.getTBW();
                difference_BAC_M = observed_BAC - sub.getPeakBAC();
                sigma_TBW_M += Math.pow(difference_TBW_M, 2);
                sigma_BAC_M += Math.pow(difference_BAC_M, 2);
            }
            else if (sub.getGender() == 'F'){
                numofinputsubswomen++;
                difference_TBW_F = observed_TBW - sub.getTBW();
                difference_BAC_F = observed_BAC - sub.getPeakBAC();
                sigma_TBW_F += Math.pow(difference_TBW_F, 2);
                sigma_BAC_F += Math.pow(difference_BAC_F, 2);
            }
            out.write( /*"" + sex_MF + " " + setp.format(observed_BAC) + " "
                      + setp.format(observed_TBW) + " " + */setp.format(sub.getPeakBAC())/* + " " + setp.format(sub.getTBW())*/);//output to file stream
            out.newLine();
        }
        double rms_TBW_M = Math.sqrt(sigma_TBW_M / numofinputsubsmen);
        double rms_BAC_M = Math.sqrt(sigma_BAC_M / numofinputsubsmen);
        double rms_TBW_F = Math.sqrt(sigma_TBW_F / numofinputsubswomen);
        double rms_BAC_F = Math.sqrt(sigma_BAC_F / numofinputsubswomen);
        out.write("rms TBW men: " + setp.format(rms_TBW_M) + "  rms TBW women: "
                  + setp.format(rms_TBW_F));
        out.newLine();
        out.write("rms BAC men: " + setp.format(rms_BAC_M) + "  rms BAC women: " + setp.format(rms_BAC_F));//ouput to file stream
        out.close();//close file stream
        in.close();//close file stream

    }

	public static void main(String args[]) throws IOException{
        get_compute_store("inputdata.txt", "outputdata.txt");
	}

}