package hu.ppke.itk.java.hakta.hf10;

public class Printer {
	
	private PrinterEngine printerEngine = new PrinterEngine();
	
	public Printer() {
		(new Thread(printerEngine)).start();
	}
	
	public void add(int id, int pages) {
		printerEngine.tasks.add(new Doc(id, pages));
		System.out.println(" >> Új dokumentum hozzáadva a nyomtatási sor végére.");
		synchronized (printerEngine) {
			printerEngine.notifyAll();
		}
	}
	
	public boolean cancel(int id) {
		if (printerEngine.actual != null)
			if (id == printerEngine.actual.id) {
				printerEngine.actual.interrupt();
				return true;
			}
		
		boolean result = false;
		for (Doc e : printerEngine.tasks)
			if (e.id == printerEngine.actual.id) {
				printerEngine.tasks.remove(e); 
				result = true;
				System.out.println(" >> A(z) " + id + " azonosítójú dokumentum törlésre került a nyomtatólistáról.");
			}
		if (result == false)

			System.out.println(" >> Nem találtam egyetlen " + id + " azonosítójú dokumentumot sem.");
		return result;
	}
	
	public boolean cancel() {
		if (printerEngine.actual != null) {
			printerEngine.actual.interrupt();
			return true;
		}
		else if (!printerEngine.tasks.isEmpty()) {
			printerEngine.tasks.poll();
			return true;
		}
		return false;
	}
	
	public void refillPaper(int numOfPages) {
		if (numOfPages > 0) {
			printerEngine.pages += numOfPages;
			System.out.println(" >> Papírtartó sikeresen feltöltve. Lapok száma jelenleg: " + printerEngine.pages);
			synchronized (printerEngine) {
				printerEngine.notifyAll();
			}
		}
		else
			System.err.println(" >> Negatív számú lapot szeretnél betölteni??!");
	}
	
	public void refillInk() {
		printerEngine.ink = 100;
		System.out.println(" >> Tintapatron sikeresen feltöltve!");
		synchronized (printerEngine) {
			printerEngine.notifyAll();
		}
	}
	
}
