package sikd.sikd5.ctrl.template;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.naming.Context;

import sikd.sikd5.security.LoginMB;
import sikd.sikd5.sikd5bean.query.MonitorSimpatikPerBulan;
import sikd.sikd5.sikd5bean.query.Periode;
import sikd.sikd5.sikd5bean.tabel.Pemda;
import sikd.sikd5.sikd5bean.tabel.TahunAnggaran;
import sikd.sikd5.sikd5bean.util.SIKDUtil;
import sikd.sikd5.sikd5bean.util.ServerUtil;
import sikd.sikd5.sikd5bean.util.SikdSessionUtil;
import sikd.sikd5.sikd5ejb.session.SettingsSessionBeanRemote;
import sikd.sikd5.sikd5ejb.session.UploadFileSessionBeanRemote;
import sikd.sikd5.sikd5ejb.session.login.LoginSessionBeanRemote;

/**
 * @author : agus
 * @tanggal : Jan 11, 2019
 */

@SessionScoped
public class TahunBulanTanggalFilter implements Serializable {
	String idComboYear = "cbYear";
	TahunAnggaran selectedYear = new TahunAnggaran();
	TahunAnggaran yearNull = new TahunAnggaran();
	boolean editMode = false;
	List<TahunAnggaran> tahuns;
	String updateRefresh = "formUtama:panelrinci";
	
	String updateYear = "formUtama:panelrinci formUtama:accParam:cal1";
	String idPanelYear = "pnTahun";
	boolean viewYear = true;

	String idPanelPeriode = "pnPeriode";
	boolean viewPeriode = true;
	String labelPeriode = "Bulan";
	String idComboPeriode = "cbPeriode";
	Periode selectedPeriode = new Periode();
	List<Periode> periodes = new ArrayList<Periode>();
	String updatePeriode = "formUtama:panelrinci formUtama:accParam:cal1";

	

	Date tgAkhir = new Date();
	Date tgAwal = new Date(tgAkhir.getYear(), tgAkhir.getMonth(), (int) 1);
	String updateTgAwal = updateRefresh;
	String updateTgAkhir = updateRefresh;
	String idCal1 = "cal1";
	String idCal2 = "cal2";

	@Inject
//	@ManagedProperty(value = "#{loginMB}")
	LoginMB loginMB;
	SettingsSessionBeanRemote settingsSes;
	LoginSessionBeanRemote sessionLogin;
	String blueSubTitle = "";

	List<Pemda> pemdas = new ArrayList<Pemda>();

	@PostConstruct
	public void init() throws Exception {
		tgAkhir = new Date();
		int bulanini = tgAkhir.getMonth();
		int tahunini = tgAkhir.getYear();
		tgAwal = new Date(tahunini, bulanini, (int) 1);

		for (Periode p : SIKDUtil.getBulans()) {
			if (p.getBulanShort() == bulanini)
				selectedPeriode = p;
			periodes.add(p);

		}
		Context ctxOffice = ServerUtil.getOfficeContextV3();
		SettingsSessionBeanRemote settingsSes = (SettingsSessionBeanRemote) ctxOffice
				.lookup(SikdSessionUtil.SETTINGS_SESSION);
		sessionLogin = (LoginSessionBeanRemote) ctxOffice
				.lookup(SikdSessionUtil.LOGIN_SESSION);
		tahuns = settingsSes.getTahuns();
		for (TahunAnggaran t : tahuns) {
			if (t.getTahun()== (tahunini+1900)) {
				selectedYear = t;
			}
		}
		
	}

	public void onYearChange() {
		if (selectedYear != null && selectedYear.getTahun() > 0) {
		try {
			int bulan = selectedPeriode == null ? new Date().getMonth() : selectedPeriode.getBulanShort();
			tgAwal = new Date(selectedYear.getTahun()-1900, bulan, (int) 1);
			blueSubTitle = "TAHUN ANGGARAN " + selectedYear.getTahun();
			pemdas.clear();
//			System.out.println("loginmb");
//			System.out.println(loginMB);
//			System.out.println("selectedYear");
//			System.out.println(selectedYear);
			List<Pemda> pemdaTh = loginMB.getPemdaByTahuns(selectedYear.getTahun());
			List<Pemda> pemdaWil = new ArrayList<Pemda>();
			if (loginMB.getTuserAccount().getWilayah() != null) {
				if (loginMB.getTuserAccount().getWilayah().getPemdas() != null) {
					pemdaWil = loginMB.getTuserAccount().getWilayah().getPemdas();
				}
			}
			if (loginMB.getTuserAccount().getPemda() != null) {
				boolean ketemu = false;
				for (Pemda pemda : pemdaWil) {
					if (pemda.getKodeSatker().equals(loginMB.getTuserAccount().getPemda().getKodeSatker())) {
						ketemu = true;
						break;
					}
				}
				if (!ketemu) {
					pemdaWil.add(loginMB.getTuserAccount().getPemda());
				}
			}
			for (Pemda pemdaW : pemdaWil) {
				for (Pemda pemdaT : pemdaTh) {
					if (pemdaW.getKodeSatker().equals(pemdaT.getKodeSatker())) {
						pemdas.add(pemdaW);
						break;
					}
				}
			}
		} catch (

		Exception e) {
			e.printStackTrace();
		}
		}
	}

//	public void onPemdaChange() {
//		if (selectedYear != null && selectedYear.getTahun() > 0) {
//			blueSubTitle = "TAHUN ANGGARAN " + selectedYear.getTahun();
//		}
//	}

	public void onTgAwalSelect() {

	}

	public void onTgAkhirSelect() {

	}

	public void onRefresh() {
//		onPemdaChange();
	}


	public void onPeriodeChange() {
		int bulan = selectedPeriode == null ? new Date().getMonth() : selectedPeriode.getBulanShort();
		tgAwal = new Date(selectedYear==null?new Date().getYear():selectedYear.getTahun()-1900, bulan, (int) 1);
	}

	public TahunAnggaran getSelectedYear() {
		return selectedYear;
	}

	public void setSelectedYear(TahunAnggaran selectedYear) {
		this.selectedYear = selectedYear;
	}

	public TahunAnggaran getYearNull() {
		return yearNull;
	}

	public void setYearNull(TahunAnggaran yearNull) {
		this.yearNull = yearNull;
	}

	public boolean isEditMode() {
		return editMode;
	}

	public void setEditMode(boolean editMode) {
		this.editMode = editMode;
	}

	public List<TahunAnggaran> getTahuns() {
		return tahuns;
	}

	public void setTahuns(List<TahunAnggaran> tahuns) {
		this.tahuns = tahuns;
	}

	public String getUpdateYear() {
		return updateYear;
	}

	public void setUpdateYear(String updateYear) {
		this.updateYear = updateYear;
	}

	public boolean isViewYear() {
		return viewYear;
	}

	public void setViewYear(boolean viewYear) {
		this.viewYear = viewYear;
	}

	public LoginMB getLoginMB() {
		return loginMB;
	}

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

	public SettingsSessionBeanRemote getSettingsSes() {
		return settingsSes;
	}

	public void setSettingsSes(SettingsSessionBeanRemote settingsSes) {
		this.settingsSes = settingsSes;
	}

	public LoginSessionBeanRemote getSessionLogin() {
		return sessionLogin;
	}

	public void setSessionLogin(LoginSessionBeanRemote sessionLogin) {
		this.sessionLogin = sessionLogin;
	}

	public String getIdComboYear() {
		return idComboYear;
	}

	public String getIdPanelYear() {
		return idPanelYear;
	}

	public String getBlueSubTitle() {
		return blueSubTitle;
	}

	public String getUpdateRefresh() {
		return updateRefresh;
	}

	public List<Pemda> getPemdas() {
		return pemdas;
	}

	public Date getTgAkhir() {
		return tgAkhir;
	}

	public void setTgAkhir(Date tgAkhir) {
		this.tgAkhir = tgAkhir;
	}

	public Date getTgAwal() {
		return tgAwal;
	}

	public void setTgAwal(Date tgAwal) {
		this.tgAwal = tgAwal;
	}

	public String getUpdateTgAwal() {
		return updateTgAwal;
	}

	public String getUpdateTgAkhir() {
		return updateTgAkhir;
	}

	public void setPemdas(List<Pemda> pemdas) {
		this.pemdas = pemdas;
	}

	public String getLabelPeriode() {
		return labelPeriode;
	}

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

	public Periode getSelectedPeriode() {
		return selectedPeriode;
	}

	public void setSelectedPeriode(Periode selectedPeriode) {
		this.selectedPeriode = selectedPeriode;
	}

	public List<Periode> getPeriodes() {
		return periodes;
	}

	public void setPeriodes(List<Periode> periodes) {
		this.periodes = periodes;
	}

	public String getIdPanelPeriode() {
		return idPanelPeriode;
	}

	public boolean isViewPeriode() {
		return viewPeriode;
	}

	public String getIdComboPeriode() {
		return idComboPeriode;
	}

	public String getUpdatePeriode() {
		return updatePeriode;
	}

	public String getIdCal1() {
		return idCal1;
	}

	public String getIdCal2() {
		return idCal2;
	}

}
