package lab10.X1;

import java.util.ArrayList;
import java.util.List;

public class Produto {
    
    private static int i = 0;
    private int id;
    private String nome;
    private double highestPrice;
    private Estado estado;
    private Observer highestBidder;

    private List<Observer> observers = new ArrayList<Observer>();

    public static List<Produto> produtosTotal = new ArrayList<Produto>();


    public Produto(String nome, double preco){
        this.id = i++;
        this.nome = nome;
        this.highestPrice = preco;
        estado=Estado.STOCK;
        produtosTotal.add(this);
    }

    public void newObs(Observer obs){
        if(!observers.contains(obs));
            observers.add(obs);
    }

    public void removeObs(Observer obs){
        if(observers.contains(obs)) 
            observers.remove(obs);
    }

    private void notifyObservers(){
        for (Observer obs : observers){
            obs.update(this);
        }
    }

    public void clearProd(){
        observers.clear();
    }

    public boolean bid(Observer obs, double price){
        newObs(obs);

        if (price > this.highestPrice && estado.equals(Estado.LEILAO)) {
            highestPrice = price;
            highestBidder = obs;
            return true;
        }

        return false;
    }



    public int getId() {
        return id;
    }

    public String getNome() {
        return nome;
    }

    public Estado getEstado() {
        return estado;
    }

    public double getHighestPrice() {
        return highestPrice;
    }

    public void setHighestPrice(double highestPrice) {
        this.highestPrice = highestPrice;
        notifyObservers();
    }

    public void setEstado(Estado estado) {
        this.estado = estado;
        notifyObservers();
    }

    public Observer getHighestBidder() {
        return highestBidder;
    }

    public void setHighestBidder(Observer highestBidder) {
        this.highestBidder = highestBidder;
        notifyObservers();
    }

    @Override
    public String toString(){
        if (highestBidder==null) 
            return "Produto "+ id + "." + nome + " tem como preço o seu preço base de " + highestPrice + ", não tendo licitante neste momento. O seu estado atual é [" + estado + "].";
        return "Produto "+ id + "." + nome + " foi vendido por " + highestPrice + ", sendo o seu licitante " + highestBidder.getNome() + ". O seu estado atual é [" + estado + "].";
    }

}
