package data;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * Loads and processes on per-page basis
 */
public class Page {
	ArrayList<String> document;

	int currentLine, totalResults;

	ArrayList<Offer> offers;

	final String TOTAL_RESULTS_STR = "<strong>Leitud";

	final String OFFERING_BEGINNING_STR = "<td colspan=\"2\" align=\"left\" valign=\"top\" class=\"txt2\">";

	public Page(String url) {
		DataReader dataReader = new DataReader();
		document = dataReader.read(url);
		offers = new ArrayList<Offer>();
		parse();
	}

	public String findLine(String contains) {
		for (; currentLine < document.size(); currentLine++) {
			String line = document.get(currentLine);
			if (line.contains(contains)) {
				return line;
			}
		}
		return null;
	}

	public int getTotalResults(String line) {
		if (line == null || line.length() < 20) {
			return 0;
		}
		String tmp = line.substring(16);// Beginning of numbers is always @ position 16.
		String result = "";
		int nonDigit = 0, digit = 0;
		for (int i = 0; i < tmp.length(); i++) {
			char c = tmp.charAt(i);
			if (Character.isDigit(c)) {
				digit++;
				result += c;
			} else if (c != ' ') {
				nonDigit++;
			}
			// System.out.print("'" + (int) c + "'" + c + '-');
		}
		return Integer.parseInt(result);
	}

	void parse() {
		currentLine = 0;
		totalResults = getTotalResults(findLine(TOTAL_RESULTS_STR));

		while (findLine(OFFERING_BEGINNING_STR) != null) {
			offers.add(new Offer(document.get(++currentLine)));
		}
	}

	public String toString() {
		String tmp = "Page. Total results: " + totalResults + " numOfferings: " + offers.size();
		for (Iterator<Offer> iter = offers.iterator(); iter.hasNext();) {
			Offer o = iter.next();
			tmp += o.toString() + "\n";
		}
		return tmp;
	}

	public ArrayList<Offer> getOffers() {
		return offers;
	}
}