package com.jasamedika.medifirst2000.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
import com.jasamedika.medifirst2000.dao.IpsrsMaintenanceDao;
import com.jasamedika.medifirst2000.dao.IpsrsPeminjamanAlatDao;
import com.jasamedika.medifirst2000.dao.IpsrsPerbaikanDao;
import com.jasamedika.medifirst2000.dao.RuanganDao;
import com.jasamedika.medifirst2000.dao.custom.IpsrsPeminjamanAlatDaoCustom;
import com.jasamedika.medifirst2000.entities.IpsrsPeminjamanAlat;
import com.jasamedika.medifirst2000.entities.IpsrsTagihanBusinessCenter;
import com.jasamedika.medifirst2000.entities.LoginUser;
import com.jasamedika.medifirst2000.entities.Pegawai;
import com.jasamedika.medifirst2000.entities.Produk;
import com.jasamedika.medifirst2000.entities.RegistrasiAset;
import com.jasamedika.medifirst2000.entities.Ruangan;
import com.jasamedika.medifirst2000.service.IpsrsPeminjamanAlatService;
import com.jasamedika.medifirst2000.service.LoginUserService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.util.DateUtil;
import com.jasamedika.medifirst2000.vo.IpsrsPeminjamanAlatVO;
import com.jasamedika.medifirst2000.vo.PegawaiVO;
import com.jasamedika.medifirst2000.vo.ProdukVO;
import com.jasamedika.medifirst2000.vo.RegistrasiAsetVO;
import com.jasamedika.medifirst2000.vo.RuanganVO;

@Service("ipsrsPeminjamanAlatService")
public class IpsrsPeminjamanAlatServiceImpl extends BaseAngaranServiceImpl implements IpsrsPeminjamanAlatService{
	
	@Autowired
	private IpsrsPerbaikanDao ipsrsPerbaikanDao;
	
	@Autowired
	private IpsrsPeminjamanAlatDao ipsrsPeminjamanAlatDao;
	
	@Autowired
	private IpsrsPeminjamanAlatDaoCustom ipsrsPeminjamanAlatDaoCustom;
	
	@Autowired
	private RuanganDao ruanganDao;
	
	@Autowired
	private IpsrsMaintenanceDao ipsrsMaintenanceDao;
	
	@Autowired
	private BaseConverterImpl <PegawaiVO, Pegawai> pegawaiConverter;
	
	@Autowired
	private BaseConverterImpl <RegistrasiAsetVO, RegistrasiAset> registrasiAsetConverter;
	
	@Autowired
	private BaseConverterImpl <RuanganVO, Ruangan> ruanganConverter;

	@Autowired
	private BaseConverterImpl <IpsrsPeminjamanAlatVO, IpsrsPeminjamanAlat> ipsrsPeminjamanAlatConverter;
	
	@Autowired
	private BaseConverterImpl <ProdukVO, Produk> produkConverter;
	
	@Autowired
	private LoginUserService loginUserService;
	
	@Override
	public Map<String, Object> getUserLogin() {
		Map<String, Object> result = new HashMap<String,Object>();
		Pegawai pegawai = loginUserService.getLoginUser().getPegawai();
		if(CommonUtil.isNotNullOrEmpty(pegawai)){
			result.put("name", pegawai.getNamaLengkap());
			result.put("idPegawai", pegawai.getId());
			result.put("idRuangan", pegawai.getRuangan().getId());
		}
		return result;
	}
	
	@Override
	public Map<String, Object> getNoPeminjamanAlatTable(){
		Map<String, Object> result = new HashMap<>();
		List<String> list = ipsrsPeminjamanAlatDao.noPeminjaman();
		if(CommonUtil.isNotNullOrEmpty(list)){
			Integer data = Integer.parseInt(list.get(list.size()-1).substring(2))+1;
			result.put("noPeminjaman", "PA"+data);
		} else{
			result.put("noPeminjaman", noPeminjamanAlat());
		}
		return result;
	}
	
	@Override
	public Map<String, Object> getRuanganPeminjamanAlat(){
		Map<String, Object> result = new HashMap<>();
		List<Ruangan> listRuangan = ruanganDao.getRuanganOnAset();
		result.put("listRuangan", listRuangan);
		return result;
	}
	
	@Override
	public Map<String, Object> getAsetPeminjamanAlat(Integer id){
		Integer idRuangan=getRuanganByUserLogin().getId();
		Map<String, Object> result = new HashMap<>();
		result.put("dataAset", ipsrsPerbaikanDao.getAllRegistrasiByRuangan(idRuangan));
		return result;
	}
	
	@Override
	public Map<String, Object> getPetugasPeminjamanAlat(){
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> listTeknisi = ipsrsMaintenanceDao.getTeknisiMaintenance();
		result.put("listTeknisi", listTeknisi);
		return result;
	}
	
	@Override
	public String noPeminjamanAlat() {
		Date dateNow=new Date();
		Integer month=DateUtil.getMonthFromDate(dateNow);
		Integer year=DateUtil.getYearFromDate(dateNow);
		Long count=ipsrsPeminjamanAlatDao.count();
		
		String monthNow=month.toString();
		String yearNow=year.toString().substring(2, 4);
		String noOrder=null;
		
		count++;
		if(count.toString().length()==1){
			noOrder="000";}
		else if(count.toString().length()==2){
			noOrder="00";}
		else if(count.toString().length()==3){
			noOrder="0";}
		if(monthNow.length()==1)
			monthNow = "0"+monthNow;

		return "PA"+yearNow+monthNow+noOrder+count;
	}
	
	@Override
	public Map<String, Object> savePeminjamanAlat(IpsrsPeminjamanAlatVO vo){
		Map<String, Object> result = new HashMap<>();
		IpsrsPeminjamanAlat ipsrsPeminjamanAlat = new IpsrsPeminjamanAlat();
		if(CommonUtil.isNotNullOrEmpty(vo)){
			ipsrsPeminjamanAlat = ipsrsPeminjamanAlatConverter.transferVOToModel(vo, new IpsrsPeminjamanAlat());
			ipsrsPeminjamanAlat.setNoPeminjaman(noPeminjamanAlat());
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getRuanganPeminjam())){
			ipsrsPeminjamanAlat.setRuanganPeminjam(ruanganConverter.transferVOToModel(vo.getRuanganPeminjam(), new Ruangan()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getPeminjam())){
			ipsrsPeminjamanAlat.setPeminjam(pegawaiConverter.transferVOToModel(vo.getPeminjam(), new Pegawai()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getRegistrasiAset())){
			ipsrsPeminjamanAlat.setRegistrasiAset(registrasiAsetConverter.transferVOToModel(vo.getRegistrasiAset(), new RegistrasiAset()));;
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getPetugas())){
			ipsrsPeminjamanAlat.setPetugas(pegawaiConverter.transferVOToModel(vo.getPetugas(), new Pegawai()));
		}
		ipsrsPeminjamanAlat.setRuanganAsal(getRuanganByUserLogin());
		if(CommonUtil.isNotNullOrEmpty(ipsrsPeminjamanAlat)){
			IpsrsPeminjamanAlat resultPeminjamanAlat = ipsrsPeminjamanAlatDao.save(ipsrsPeminjamanAlat);
			result.put("noRec", resultPeminjamanAlat.noRec);
		}
		
		return result;
	}
	
	@Override
	public Map<String, Object> getAllPeminjamanAlat(String status){
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> listIpsrsPeminjamanAlat = ipsrsPeminjamanAlatDao.getAllPeminjamanAlat(status);
		result.put("listIpsrsPeminjamanAlat", listIpsrsPeminjamanAlat);
		return result;
	}
	
	@Override
	public boolean deletePeminjamanAlat(String noRec){
		IpsrsPeminjamanAlat ipsrsPeminjamanAlat = new IpsrsPeminjamanAlat();
		if(CommonUtil.isNotNullOrEmpty(noRec)){
			ipsrsPeminjamanAlat = ipsrsPeminjamanAlatDao.findOne(noRec);
			ipsrsPeminjamanAlatDao.delete(ipsrsPeminjamanAlat);
			return true;
		} else{
			return false;
		}
	}
	
	@Override
	public Map<String, Object> findPeminjamanAlatByPeriode(String periodeAwal, String periodeAkhir, Integer id, String status){
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> ipsrsPeminjamanAlat = 
				ipsrsPeminjamanAlatDao.findPeminjamanAlatByPeriode(periodeAwal, periodeAkhir, id, status);
		result.put("ipsrsPeminjamanAlat", ipsrsPeminjamanAlat);
		return result;
	}
	
	@Override
	public Map<String, Object> updateStatusPeminjaman(IpsrsPeminjamanAlatVO vo){
		Map<String, Object> result = new HashMap<>();
		ipsrsPeminjamanAlatDaoCustom.updateStatusPeminjaman(vo);
		return result;
	}
}
