/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package usda.weru.nrmv;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.StringTokenizer;
import org.apache.commons.lang.WordUtils;
import org.openide.util.Exceptions;

/**
 *
 * @author Benjamin.Todd
 */
public class ConvertSeason extends NrmvConverter {

    /**
     *
     */
    public ConvertSeason() {
    }
    /**
     *
     */
    @Override
public void intitiateFileIo(){
        
        try {
            fr = new FileReader(fileToReadFrom);
        } catch (FileNotFoundException ex) {
            Exceptions.printStackTrace(ex);
        }
        br = new BufferedReader(fr);
        try {
            fw = new FileWriter(this.yearlyWriteTo);
        } catch (IOException ex) {
            Exceptions.printStackTrace(ex);
        }
        pw = new PrintWriter(fw);
    }
    /**
     *
     */
    @Override
    public void setVariables() {
        variables = new ArrayList<String>();
        variables.add("time");
        variables.add("id");
        variables.add("crop standing stem mass");
        variables.add("crop standing leaf mass");
        variables.add("crop standing storage mass");
        variables.add("crop flat stem mass");
        variables.add("crop flat leaf mass");
        variables.add("crop flat storage mass ");
        variables.add("crop stem mass below soil surface ");
        variables.add("crop root storage mass potatoes carrots onion peanuts ");
        variables.add("crop root fibrous mass");
        variables.add("Crop height");
        variables.add("Number of crop stems per unit area ");
        variables.add("Crop root depth");
        variables.add("reproductive mass to grain fraction");
        variables.add("a representative diameter so that number of stems times representative stem diameter times crop height = stem area index");
        variables.add("number of days of growth completed since crop planted");
        variables.add("accumulated chilling units");
        variables.add("crop accumulated heat units");
        variables.add("potential heat units for crop maturity");
        variables.add("heat unit index");
        variables.add("number of days since crop matured");
        variables.add("day of year in which a winter annual releases stored growth");
      
        for (int i = 0; i < variables.size(); i++) {
            variables.set(i, WordUtils.capitalize(variables.get(i)));
        }
    }

    /**
     *
     * @param number
     * @return
     */
    /*
  
     * */
    @Override
    public void setLinesToSkip() {
        this.linesToSkip = 3;
    }

    /**
     *
     * @param pw
     */
  
        @Override
    public void printSummaryUnits(PrintWriter pw) {
        pw.println();

        // this.printLineCommas(pw, temp);
        pw.println("unit,,kg/m^2,kg/m^2,kg/m^2,kg/m^2,kg/m^2,kg/m^2,kg/m^2,kg/m^2,kg/m^2,m,#/m^2,m,fraction,m,days,Degree C days,Degree C days,0-1, days,day in year,days");
       // , day in year, crop
    }
    /**
     *
     * @param al
     * @return
     */
    @Override
    public ArrayList<String> changeData(ArrayList<String> al) {
        int i = Integer.parseInt(al.get(0));
        String str = convertNumber(i);
        al.set(0, str);
        //      al.subList(2, 3).clear();
          al.subList(22, al.size()).clear();
        al.add(1, "1");
        return al;
    }
    @Override
    public String convertNumber(int number) {
        number--;
        GregorianCalendar ca = new GregorianCalendar();
        ca.set(Calendar.YEAR, 2001+number);
   
        SimpleDateFormat df = new SimpleDateFormat();
        df.applyPattern("yyyy");
        //        df.applyPattern("yyyy-MM-dd");

        return df.format(ca.getTime());

    }
    
    @Override
    public boolean addToSum() {
        return false;
    }

    @Override
    public void setUnits() {
          units = new ArrayList<String>();
       String sUnit = ",Date ,Double ,kg/m^2,kg/m^2,kg/m^2,kg/m^2,kg/m^2,kg/m^2,kg/m^2,kg/m^2,kg/m^2,m,#/m^2,m,fraction,m,days,Degree C days,Degree C days,0-1, days,day in year,days";
       StringTokenizer st = new StringTokenizer(sUnit,",", false);
       while(st.hasMoreTokens())
               {
        units.add(st.nextToken());
    }
    }
}
