package com.ibrahimnetto.FabricaDados.Maquinas;

import com.ibrahimnetto.FabricaDados.Fabrica;
import com.ibrahimnetto.FabricaDados.Interfaces.MaquinaMontagem;
import com.ibrahimnetto.FabricaDados.Pedido;

/**
 * Created by Ibrahim on 07/10/14.
 */
public class MaquinaMontar extends Thread implements MaquinaMontagem {
    Fabrica fabrica;
    boolean power;

    Pedido pedido;

    public Object lockPedido;

    public MaquinaMontar(Fabrica fabrica) {
        this.fabrica = fabrica;
        this.setName("MaquinaMontar");
        power = true;

        lockPedido = fabrica.controleProducao.lockPedido;
    }

    @Override
    public int montagemDado(int qtdeChapas) {
        for (int i = 0; i < qtdeChapas; i++) {
            System.out.println("MaquinaMontar: Processando Dado " + i + "...");
            try {
                sleep(500);
            } catch (InterruptedException e) {

            }
        }
        System.out.println("MaquinaMontar: Montagem Completa.");
        return qtdeChapas;
    }

    public void run() {
        while (power) {
            synchronized (lockPedido) {
                pedido = fabrica.controleProducao.pedido;
                if (pedido != null && pedido.moldado && pedido.marcado && pedido.cortado && !pedido.montado) {
                    //System.out.println("MaquinaMontar: Pedido Recebido.");
                    montagemDado(pedido.qtde);
                    pedido.montado = true;
                    pedido.completo = true;
                    if(pedido.tipo==0){
                    fabrica.estoque.addNoFrills(pedido.qtde);
                    }
                    if(pedido.tipo==1)
                    {
                        fabrica.estoque.addlowPrice(pedido.qtde);
                    }
                    if(pedido.tipo==2)
                    {
                        fabrica.estoque.addhybrid(pedido.qtde);
                    }
                    if(pedido.tipo==3){
                        fabrica.estoque.adddifferentiation(pedido.qtde);
                    }
                    if(pedido.tipo==4){
                        fabrica.estoque.addfocused(pedido.qtde);
                    }
                    lockPedido.notifyAll();
                } else {
                    try {
                        //System.out.println("MaquinaMontar: Aguardando...");
                        lockPedido.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

