package homework4;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class OPReader {

	private static final String fileName = "op.csv";
	private static final String re = "\\|";
	private static final int agencyColNum = 2;
	private static final int ucrColNum = 3;
	private static final int dateColNum = 4;
	
	private List incidents;
	private Map ucrMap;
	private Map freqMap;
	private BufferedReader br;
	
	public OPReader() throws IOException {
		ucrMap = new TreeMap();
		freqMap = new TreeMap();
		incidents = new ArrayList();
		br = new BufferedReader(new FileReader(fileName));	
		br.readLine(); // skip first line
	}
	
	public Map getUcrMap() {
		return ucrMap;
	}
	
	public Map getFreqMap() {
		return freqMap;
	}
	
	public List getIncidents() {
		return incidents;
	}
	
	public void read() throws IOException {
		String line = null;
		String agency = null;
		String ucr = null;
		String date = null;
		
		do {
			line = br.readLine();
			if (line == null) {
				continue;
			}
			
			String[] tokens = line.split(re);
			agency = tokens[agencyColNum];
			ucr = tokens[ucrColNum];
			date = tokens[dateColNum];
		
			if (agency.equalsIgnoreCase("OP")) {
				OPIncident opi = new OPIncident(ucr, date);
				incidents.add(opi);
				if (ucrMap.containsKey(ucr)) {
					List ucrList = (List) ucrMap.get(ucr);
					ucrList.add(opi);
				} else {
					List ucrList = new ArrayList();
					ucrList.add(opi);
					ucrMap.put(ucr, ucrList);
				}
				if (freqMap.containsKey(ucr)) {
					int interval = OPAnalyze.getInterval(opi);
					Integer[] freqs = (Integer[]) freqMap.get(ucr);
					if (freqs[interval] != null) {
						freqs[interval] = new Integer(freqs[interval].intValue()+1);
					} else {
						freqs[interval] = new Integer(1);
					}
				} else {
					int size = (int) Math.ceil(1440.0/OPAnalyze.minInterval);
					Integer[] freqs = new Integer[size];
					int interval = OPAnalyze.getInterval(opi);
					freqs[interval] = new Integer(1);
					freqMap.put(ucr, freqs);
				}
			}
		} while (line != null);
	}
}

