import DB.DB;
import beans.Deo;
import beans.Korisnik;
import java.util.*;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

@ManagedBean
@SessionScoped
public class Controler {

    private Korisnik korisnik = null;
    private String user;
    private String pass;
    private Deo trenutniDeo;
    private List<Deo> delovi = DB.delovi;
    private Deo noviDeo = new Deo();
    private String filter = "";
    private int ukupno = 0;
    private String poruka;

    public int getUkupno() {
        return ukupno;
    }

    public void setUkupno(int ukupno) {
        this.ukupno = ukupno;
    }

    public String getPoruka() {
        return poruka;
    }

    public void setPoruka(String poruka) {
        this.poruka = poruka;
    }

    public String getFilter() {
        return filter;
    }

    public void setFilter(String filter) {
        this.filter = filter;
    }

    public List<Deo> getDelovi() {
        return delovi;
    }

    public void setDelovi(List<Deo> delovi) {
        this.delovi = delovi;
    }

    public String editDeo(Deo d) {
        d.setEdit(true);
        trenutniDeo = d;
        return null;
    }

    public String deleteDeo(Deo d) {
        delovi.remove(d);
        return null;
    }

    public String editedDeo() {
        if (trenutniDeo != null) {
            trenutniDeo.setEdit(false);
            trenutniDeo = null;
        }
        return null;
    }

    public String addDeo() {
        delovi.add(noviDeo);
        noviDeo = new Deo();
        return null;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    public Deo getTrenutniDeo() {
        return trenutniDeo;
    }

    public void setTrenutniDeo(Deo trenutniDeo) {
        this.trenutniDeo = trenutniDeo;
    }

    public Deo getNoviDeo() {
        return noviDeo;
    }

    public void setNoviDeo(Deo noviDeo) {
        this.noviDeo = noviDeo;
    }

    public String LogIn() {
        if (DB.korisnici.containsKey(user)) {
            korisnik = DB.korisnici.get(user);
            if (korisnik.getPass().equals(pass)) {
                if (korisnik.getTip().equals("fabrikant")) {
                    return "fabrika";
                } else {
                    return "servis";
                }
            }
        }
        return null;
    }

    public String LogOut() {
        FacesContext context = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
        session.invalidate();
        return "index";
    }

    public void filtriraj() {
        if (filter.equals("")) {
            delovi = DB.delovi;
        } else {
            List<Deo> nova = new ArrayList<Deo>();
            for (Deo d : DB.delovi) {
                if (d.getNaziv().equalsIgnoreCase(filter) || d.getProizvodjac().equalsIgnoreCase(filter)) {
                    nova.add(d);
                }
            }
            delovi = nova;
        }
    }

    public String naruci() {

        boolean greska = false;
        ukupno = 0;
        for (Deo d : delovi) {
            if (d.getNarucujem() > 0) {
                if (d.getNarucujem() > d.getBrojPrimeraka()) {
                    poruka = "Broj narucenih je veci od onoga sto postoji na stanju";
                    greska = true;
                } else {
                    d.setProdato(d.getProdato() + d.getNarucujem());
                    d.setBrojPrimeraka(d.getBrojPrimeraka() - d.getNarucujem());
                    ukupno += d.getNarucujem() * d.getCena();
                    d.setNarucujem(0);
                }
            }
        }
        if (greska) {
            return "servis";
        } else {
            return "ukupno";
        }
    }
}
