package sikd.sikd5.laporan;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import sikd.sikd5.model.combo.MonthYearCombo;
import sikd.sikd5.model.combo.PemdaCombo;
import sikd.sikd5.security.LoginMB;
import sikd.sikd5.sikd5bean.laporan.Lampiran1Apbd;
import sikd.sikd5.sikd5bean.tabel.Pemda;
import sikd.sikd5.sikd5bean.tabel.TahunAnggaran;
import sikd.sikd5.sikd5bean.tabel.mgr.TUserAccount;
import sikd.sikd5.sikd5ejb.session.LaporanSessionBeanRemote;
import sikd.sikd5.sikd5ejb.session.SettingsSessionBeanRemote;

/**
 *
 * @author soraturaes
 */
@ManagedBean(name = "laporanApbdMBean")
@ViewScoped
public class LaporanApbdMBean implements Serializable {
    PemdaCombo pemdaCombo;
//    TahunAnggaran selectedYear;
//    List<TahunAnggaran> tahuns;
    protected List<Lampiran1Apbd> datas;

    @EJB
    LaporanSessionBeanRemote laporanSession;
    @EJB
    SettingsSessionBeanRemote settingSession;

    @ManagedProperty(value = "#{loginMB}")
    LoginMB loginMB;
    
    Pemda p = new Pemda(0, "", "", "", "Nasional", "", (short) 0);
    String labelPeriode="";
    
    MonthYearCombo monthYearCombo;

    @PostConstruct
    public void init() {
        try {
            
            labelPeriode="Tahun";
            List<TahunAnggaran> tahuns = settingSession.getTahuns();
            monthYearCombo = new MonthYearCombo("Tahun", true, "idComboPeriode", null, false, null, "", "idComboYear", null, tahuns);
            monthYearCombo.setAlign("center");
            pemdaCombo = new PemdaCombo(true, false, getUpdateRefresh(), "Pemerintah Daerah");
            pemdaCombo.setAlign("center");
            pemdaCombo.setLabelStyle("width: 150px; padding: 10px;");

            Date dd = new Date();            
            GregorianCalendar gc = (GregorianCalendar)Calendar.getInstance();
            gc.setTime(dd);
            short yy = (short) gc.get(Calendar.YEAR);
            
            if(tahuns!=null && !tahuns.isEmpty()){
                short ii = tahuns.get(0).getTahun();
                while(ii < yy){
                    ii+=1;
                    monthYearCombo.getYears().add(0, new TahunAnggaran((short)ii, (short)0));
                }
                monthYearCombo.setSelectedYear(monthYearCombo.getYears().get(0));
            }
            else monthYearCombo.setSelectedYear( new TahunAnggaran(yy, (short)0));
            
            
            pemdaCombo.setPemdas(loginMB.getPemdaByTahuns(monthYearCombo.getSelectedYear().getTahun()));
            if (pemdaCombo.getPemdas() != null && !pemdaCombo.getPemdas().isEmpty()) {
                pemdaCombo.getPemdas().add(0, p);
                pemdaCombo.setSelectedPemda(pemdaCombo.getPemdas().get(0));
            } else {
                pemdaCombo.addPemda(p);
                pemdaCombo.setSelectedPemda(p);
            }
            TUserAccount uac = loginMB.getTuserAccount();
            if (uac != null && uac.getPemda() != null) {
                pemdaCombo.setSelectedPemda(uac.getPemda());
                pemdaCombo.setView(false);
            }

        } catch (Exception ex) {
            Logger.getLogger(LaporanApbdMBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void onPemdaChange() {
        
    }
    public void onYearChange() {
        try {
            pemdaCombo.setPemdas(loginMB.getPemdaByTahuns(monthYearCombo.getSelectedYear().getTahun()));
            if (pemdaCombo.getPemdas() != null && !pemdaCombo.getPemdas().isEmpty()) {
                pemdaCombo.getPemdas().add(0, p);
                pemdaCombo.setSelectedPemda(pemdaCombo.getPemdas().get(0));
            } else {
                pemdaCombo.addPemda(p);
                pemdaCombo.setSelectedPemda(p);
            }
        } catch (Exception ex) {
            Logger.getLogger(LaporanApbdMBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void onRefresh() {
        if (datas != null) {
            datas.clear();
        } else {
            datas = new ArrayList();
        }
        if (monthYearCombo.getSelectedYear() != null && monthYearCombo.getSelectedYear().getTahun() > 0) {
            if (pemdaCombo.getSelectedPemda() != null && pemdaCombo.getSelectedPemda().getKodeSatker() != null) {
                try {
                    if (pemdaCombo.getSelectedPemda().getId() == 0) {
                        datas = laporanSession.getLaporanApbdNasional(monthYearCombo.getSelectedYear().getTahun());
                    } else {
                        datas = laporanSession.getLaporanApbdPemda(monthYearCombo.getSelectedYear().getTahun(), pemdaCombo.getSelectedPemda().getKodeSatker());
                    }

                } catch (Exception ex) {
                    Logger.getLogger(LaporanApbdMBean.class.getName()).log(Level.SEVERE, null, ex);
                    ex.printStackTrace();
                }
            }
        }
    }

    public PemdaCombo getPemdaCombo() {
        return pemdaCombo;
    }

    public void setPemdaCombo(PemdaCombo pemdaCombo) {
        this.pemdaCombo = pemdaCombo;
    }

    public List<Lampiran1Apbd> getDatas() {
        return datas;
    }

    public void setDatas(List<Lampiran1Apbd> datas) {
        this.datas = datas;
    }

    public LoginMB getLoginMB() {
        return loginMB;
    }

    public void setLoginMB(LoginMB loginMB) {
        this.loginMB = loginMB;
    }

    public String getUpdateRefresh() {
        return "tabel";
    }

    public String getIdPanelYear() {
        return "panelYear";
    }

    public String getIdComboYear() {
        return "comboYear";
    }

    public String getUpdateYear() {
        return pemdaCombo.getIdPanel();
    }

    public boolean isViewYear() {
        return true;
    }

    public boolean isEditMode() {
        return false;
    }


    public TahunAnggaran getYearNull() {
        return new TahunAnggaran((short) 0, (short) 0);
    }

    public String getLabelPeriode() {
        return labelPeriode;
    }

    public void setLabelPeriode(String labelPeriode) {
        this.labelPeriode = labelPeriode;
    }

    public MonthYearCombo getMonthYearCombo() {
        return monthYearCombo;
    }

    public void setMonthYearCombo(MonthYearCombo monthYearCombo) {
        this.monthYearCombo = monthYearCombo;
    }
    

}
