package hu.ppke.itk.java.hakta.hf10;

import java.util.concurrent.ConcurrentLinkedQueue;

public class PrinterEngine extends Thread {
	
	ConcurrentLinkedQueue<Doc> tasks = new ConcurrentLinkedQueue<>();
	Doc actual;
	final int FULL_INK = 100;
	final int INK_PER_PAGE = 5;
	volatile int ink = FULL_INK;
	volatile int pages = 10;
	
	@Override
	public void run() {
		try {
			while (!Thread.interrupted()) {
				if (!tasks.isEmpty()) {
					actual = tasks.poll();

					while (ink < INK_PER_PAGE * actual.pages) {
						System.err.println(" >> Nincs elég tinta a nyomtatóban. Töltsd újra!");
						synchronized (this) { this.wait(); }
					}
					while (pages < actual.pages) {
						System.err.println(" >> Nincs elég papír a nyomtatóban. Töltsd újra!");
						synchronized (this) { this.wait(); }
					}

					actual.start();
					try {
						actual.join();
						ink -= actual.pages * INK_PER_PAGE;
						System.out.println(" >> A(z) " + actual.id + " azonosítójú dokumentum nyomtatása sikeres.");
					} catch (InterruptedException e) {
						System.out.println(" >> A(z) " + actual.id + " azonosítójú dokumentum nyomtatása törölve.");
					}

					actual = null;
				} else
					synchronized (this) { this.wait(); }
			}
		} catch (InterruptedException e) {
		} finally {
			System.out.println(" >> A nyomtató kikapcsolt.");
		}
	}
}
