package com.jasamedika.medifirst2000.service;

import com.jasamedika.medifirst2000.dto.DataCutiDto;
import com.jasamedika.medifirst2000.dto.MonitoringJatahCutiDto;
import com.jasamedika.medifirst2000.entities.PegawaiHistoriRekapIndex;
import com.jasamedika.medifirst2000.vo.JatahCutiDanIzinVO;
import com.jasamedika.medifirst2000.vo.KelompokShiftKerjaCustomVO;
import com.jasamedika.medifirst2000.vo.ListTanggalCutiVO;
import com.jasamedika.medifirst2000.vo.PlanningPegawaiStatusVO;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

public interface PermohonanStatusPegawaiService {

	Map<String, Object> getUserLogin(Integer idPegawai);

	Map<String, Object> noUsulan();

	Map<String, Object> getLoadData(Integer ruanganId);

	Map<String, Object> getDataPermohonanStatus(Integer id);

	Map<String, Object> getDataMapPermohonanStatus(Integer id);

	Map<String, Object> getDataCuti(Integer pegawaiId, String year, Integer statusPegawaiId);

	Map<String, Object> savePlanningPegawaiStatus(PlanningPegawaiStatusVO vo);

	DataCutiDto perbaruiDataCuti(Integer idPegawai, Integer idStatusPegawai);

	boolean validateTanggalPermohonanRev(Integer statusPegawaiPlanId, Set<ListTanggalCutiVO> listTanggalCutiVO,
			Integer idPegawai);

	boolean validateTanggalPermohonanRev(List<Date> listTgl, Integer idPegawai);

	Map<String, Object> getListPermohonanStatus(Integer ruanganId);

	Map<String, Object> getListPermohonanStatusPegawai(Boolean sdm);

	Map<String, Object> getListPermohonanStatusPegawaiPaging(Integer page, Integer limit, String sort, String dir,
			Integer idPegawai, String nama, String jenisPermohonan, Integer statusPermohonan, String tglPermohonan,
			Boolean isSdm, Boolean isCutiLuarNegeri, Boolean isCutiLuarKota);

	Map<String, Object> penangguhanPerubahanStatusKehadiran(PlanningPegawaiStatusVO vo);

	Map<String, Object> getApprovalStatus(Integer idPegawai);

	List<Map<String, Object>> getListTanggalPermohonan(Integer idPegawai);

	Map<String, Object> getApprovalStatusPaging(Integer page, Integer limit, String sort, String dir, Integer idPegawai,
			String nama, String jenisPermohonan, Integer statusPermohonan);

	Map<String, Object> getApprovalStatusPaging(Integer page, Integer limit, String sort, String dir, Integer idPegawai,
			String nama, String jenisPermohonan, Integer statusPermohonan, String tglPermohonan,
			Boolean isCutiLuarNegeri, Boolean isCutiLuarKota);

	Map<String, Object> getApprovalStatusByNorecPlanning(Integer idPegawai, String noRec);

	Map<String, Object> getApprovalStatusByStatusPegawaiPlan(Integer idPegawai, Integer statusPegawaiPlanId);

	Map<String, Object> approvalPermohonanStatus(PlanningPegawaiStatusVO vo);

	Map<String, Object> checkKelompokShiftKerja(PlanningPegawaiStatusVO vo, Integer statusPegawaiId,
			String noRecPlanning);

	Map<String, Object> savePegawaiHistoriRekapIndex(PlanningPegawaiStatusVO vo,
			PegawaiHistoriRekapIndex pegawaiHistoriRekapIndex, Integer kelomokIndexId, String noRecPlanning);

	Map<String, Object> unVerifPermohonanStatus(PlanningPegawaiStatusVO vo);

	String getRunningNumber(String kegunaan);

	Map<String, Object> setJatahCuti(KelompokShiftKerjaCustomVO vo);

	Map<String, Object> setJatahCutiPegawai(JatahCutiDanIzinVO vo);

	Map<String, Object> setJatahCutiRecursive(KelompokShiftKerjaCustomVO vo);

	Map<String, Object> setJatahCutiPegawaiRecursive(JatahCutiDanIzinVO vo);

	List<Map<String, Object>> getAllDataCuti();

	List<MonitoringJatahCutiDto> findByPegawai(Integer idPegawai);

	List<Map<String, Object>> getAllDataCuti(Integer idPegawai);

	Map<String, Object> updatePlanningPegawaiStatus(PlanningPegawaiStatusVO vo);

	Map<String, Object> deletePlanningPegawaiStatus(String noRec);

	JatahCutiDanIzinVO setJatahCutiDanIzinVo(Integer idPegawai, Integer idStatusPegawai);

	Integer countJumlahPengajuanDiprosesByPegawai(Integer idPegawai, Integer idPlan);

	Integer countJumlahPengajuanDiprosesByPegawai(Integer idPegawai, Integer idPlan, String noPlanning);

	Integer countJumlahPengajuanTahunDepanDiprosesByPegawai(Integer idPegawai, Integer idPlan);

	Integer countJumlahPengajuanTahunDepanDiprosesByPegawai(Integer idPegawai, Integer idPlan, String noPlanning);

}
