package weaver.attendance.service;

import java.util.List;
import java.util.Map;

import com.engine.kq.entity.KQOvertimeRulesDetailEntity;
import com.google.common.collect.Maps;

import weaver.hrm.User;
import weaver.sqsddldcxt.attendance.service.OvertimeRuleComputingMode5Service;


public class OvertimeRuleComputingModeService {
	
	private OvertimeRuleComputingMode5Service mode5Service;
	
	public OvertimeRuleComputingModeService() {
		this.mode5Service = new OvertimeRuleComputingMode5Service();
	}
	
	/**
	 * 自定义新的加班计算方式（computingMode）
	 * key值为int型，并且不允许与系统现有的值重复
	 * 
	 * 系统现有值包括：
	 * 0=不允许加班
	 * 1=需审批，以加班流程为准
	 * 2=需审批，以打卡为准，但是不能超过加班流程时长
	 * 3=无需审批，根据打卡时间计算加班时长
	 * 4=需审批，流程和打卡取交集
	 * 
	 * @param languageId
	 * @return
	 */
	public Map<Integer, String> getNewComputingMode(int languageId) {
		Map<Integer, String> map = Maps.newLinkedHashMap();
//		map.put(mode5Service.getComputingMode(), mode5Service.getComputingModeTitle(languageId));
		return map;
	}
	

	/**
	 * 考勤报表点击弹出的加班明细页签中，需要处理自定义的加班计算方式
	 * 
	 * @param computingMode 
	 * 				加班计算方式
	 * @param params
	 * @param user
	 */
	public String buildTableString4CustomOvertimeFlow(int computingMode, Map<String, Object> params, User user) {
		String result = "";
		switch(computingMode) {
		case 5:
			result = mode5Service.buildTableString4CustomOvertimeFlow(params, user);
			break;
		}
		return result;
	}
	
	/**
	 * 加班归档时，需要处理自定义的加班计算方式
	 * 
	 * @param computingMode 
	 * 				当前加班计算方式
	 * @param resourceid 
	 * 				加班人
	 * @param splitDate 
	 * 				加班日期
	 * @param changeTypeMap  
	 * 				人员在指定日期属于工作日、休息日还是节假日。
	 * 				{key:splitDate+"_"+resourceId, value:1=节假日、2=工作日、3=休息日}
	 * @param overRulesDetailMap 
	 * 				指定日期、指定日期类型的  加班规则对象。
	 * 				{key:splitDate+"_"+changeType, value:加班规则对象}
	 * @param restTimeMap 
	 * 				指定日期、指定日期类型的 排除休息时段集合。
	 * 				{key:splitDate+"_"+changeType, value:加班规则中设置的排除休息时段 {[开始时间,结束时间]} }
	 * @param computingModeMap 
	 * 				指定日期、指定日期类型 启用的加班计算方式。
	 * 				{key:splitDate+"_"+changeType, value:0=无效、1=需审批，以加班流程为准、2=需审批，以打卡为准，但是不能超过加班流程时长、3=无需审批，根据打卡时间计算加班时长、4=需审批，流程和打卡取交集、其他值=自定义}
	 * @param main_uuid 
	 * 				已生成的加班日志记录表的uuid（kq_overtime_log），写入加班明细日志时用来关联主表（kq_overtime_log_detail.main_uuid）
	 * @throws Exception
	 */
	public void doComputingMode(int computingMode, String resourceid, String splitDate,
		      Map<String, Integer> changeTypeMap,
		      Map<String, KQOvertimeRulesDetailEntity> overRulesDetailMap,
		      Map<String, List<String[]>> restTimeMap, 
		      Map<String, Integer> computingModeMap,
		      String main_uuid) {
		switch(computingMode) {
		case 5:
			mode5Service.doComputingMode(resourceid, splitDate, changeTypeMap, overRulesDetailMap, restTimeMap, computingModeMap, main_uuid);
			break;
		}
	}
}
