/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package usda.weru.nrmv;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import org.openide.util.Exceptions;

/**
 *
 * @author Benjamin.Todd
 */
public class LayerAverageConverter {

    private int numOfLayers;
    ArrayList<String> variables;
    ArrayList<AverageConverter> listOfConverters;
    private final String monthName, yearName, type, myPath;
    private final NrmvConverter myNc;

    public LayerAverageConverter(NrmvConverter nc, ArrayList<String> var,
            String monthName1, String yearName1, String name, String path) {
        myPath = path;
        myNc = nc;
        variables = new ArrayList<String>();
        variables = var;
        listOfConverters = new ArrayList<AverageConverter>();
        monthName = monthName1;
        yearName = yearName1;
        type = name;
    }

    public void createConverters(int num) {
        numOfLayers = num;
        for (int i = 0; i < numOfLayers; i++) {
            AverageConverter av = new AverageConverter(myNc, variables, type, myPath);
            listOfConverters.add(av);
        }
        //  System.out.println("Created this many converters" + listOfConverters.size());
    }

    public void addToSum(ArrayList<String> al) {
        int j = Integer.parseInt(al.get(1));

        this.listOfConverters.get(j - 1).addToSum(al);

    }

    public void Summarize() {
        for (AverageConverter av : this.listOfConverters) {
            av.calculateSummaries();
        }
    }

    public void printOut() {
        String summaryName = myPath + type + "-summary.csv";
        FileWriter monthFw = null, yearFw = null, summaryFw = null;
        PrintWriter monthPw = null, yearPw = null, summaryPw = null;
        try {
            monthFw = new FileWriter(monthName);
            yearFw = new FileWriter(yearName);
            summaryFw = new FileWriter(summaryName);
            monthPw = new PrintWriter(monthFw);
            yearPw = new PrintWriter(yearFw);
            summaryPw = new PrintWriter(summaryFw);
        } catch (IOException ex) {
            Exceptions.printStackTrace(ex);
        }
        for (AverageConverter listOfConverter : listOfConverters) {
            listOfConverter.finish();
        }
        String header = monthName.replace(".csv", "");
        header = header.substring(header.lastIndexOf('/') + 1, header.length());
        this.printHeader(header, type, monthPw);
        listOfConverters.get(0).printLineCommas(false, monthPw, variables);
        myNc.printUnits(monthPw);

        header = yearName.replace(".csv", "");
        header = header.substring(header.lastIndexOf('/') + 1, header.length());
        this.printHeader(header, type, yearPw);
        listOfConverters.get(0).printLineCommas(false, yearPw, variables);
        myNc.printUnits(yearPw);

        header = summaryName.replace(".csv", "");
        header = header.substring(header.lastIndexOf('/') + 1, header.length());
        this.printHeader(header, type, summaryPw);
        ArrayList<String> tmp = new ArrayList<String>(variables);
        tmp.subList(0, 1).clear();

        listOfConverters.get(0).printLineCommas(false, summaryPw, tmp);
        myNc.printSummaryUnits(summaryPw);

        for (int cLayer = 0; cLayer < listOfConverters.get(0).getNumberOfMonths(); cLayer++) {
            for (AverageConverter listOfConverter : listOfConverters) {
                listOfConverter.printSpecificLineMonthly(cLayer, monthPw);
            }
        }
        for (int cLayer = 0; cLayer < listOfConverters.get(0).getNumberOfYears(); cLayer++) {
            for (AverageConverter listOfConverter : listOfConverters) {
                listOfConverter.printSpecificLineYearly(cLayer, yearPw);
            }
        }

        for (AverageConverter listOfConverter : listOfConverters) {
            listOfConverter.printSpecificLineSummary(summaryPw);
        }

        try {
            monthFw.close();
            yearFw.close();
            monthPw.close();
            yearPw.close();
            summaryFw.close();
            summaryPw.close();
        } catch (IOException ex) {
            Exceptions.printStackTrace(ex);
        }
    }

    public void printHeader(String name, String type, PrintWriter pw) {

        pw.println("@T, " + type);
        pw.println("type, " + type);
        pw.print("@H");

    }
}
