/**
 * @date 2020年3月23日  
 * @author 翁东州
 * @方法中文名称:
 */
package cn.timer.api.config.enuminterface;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

import cn.timer.api.dto.yggl.YgbintuDto;
import lombok.Getter;

/**
 * @date 2020年3月23日  
 * @author 翁东州
 * @方法中文名称:
 */

public interface YgEnumInterface {
	/**
	 * 男女
	 */
	@Getter
	enum sex implements YgEnumInterface{
		MAN(0,"男"),WOMAN(1,"女");
		
		private Integer type;

		private String name;
		
		sex(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		public static String isMan(String index) {
			sex mow = (index == null || index.length() == 0) ? sex.MAN : (index.indexOf(sex.MAN.name)!= -1)||(index.indexOf(sex.MAN.type)!= -1) ? sex.MAN:sex.WOMAN;
			return mow.type.toString();			
		}
	}
	/**
	 * 员工类型
	 */
	@Getter
	enum YgJobType  implements YgEnumInterface{
		QUANZHI(0, "全"),SHIXI(1, "实习"),JIANZHI(2, "兼"),LWPQ(3, "劳务派遣"),
		LAOWU(4, "劳务"),PAIQIAN(5, "派遣"),WAIBAO(6, "外包"),TUIXIU(7, "退休");

		private Integer type;

		private String name;

		YgJobType(Integer type, String name) {
			this.type = type;
			this.name = name;
		}

		public static String choose(String index) {
			YgJobType result = YgJobType.QUANZHI;
			if(index == null || index.length() == 0) return result.type.toString();
			for (YgJobType item : YgJobType.values()) {
				if (index.indexOf(item.getType()) !=-1 ||index.indexOf(item.getName()) !=-1 ) result = item;
			}
			return result.type.toString();
		}
	}
	
	/**
	 * 员工状态
	 */
	@Getter
	enum jobStatus implements YgEnumInterface{
		SHIYONG(0,"试用"),ZHENSHI(1,"正式"),LIZHIZHONG(2,"离职中"),YILIZHI(3,"已离职");
		
		private Integer type;

		private String name;
		
		jobStatus(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		public static String isZhen(String index) {
			jobStatus zos = (index == null || index.length() == 0) ? YgEnumInterface.jobStatus.ZHENSHI: (index.indexOf(jobStatus.ZHENSHI.name)!= -1)||(index.indexOf(jobStatus.ZHENSHI.type)!= -1) ? jobStatus.ZHENSHI:jobStatus.SHIYONG;
			return zos.type.toString();
		}
		
		
	}
	
	/**
	 * 入职日期
	 */
	@Getter
	enum rzTime  implements YgEnumInterface{
		ZHEN("--","yyyy-M-d"),XIE("//","yyyy/M/d"),
		DIAN("..","yyyy.M.d"),NYR("年月日","yyyy年M月d日");
		
		private String type;

		private String name;

		rzTime(String type, String name) {
			this.type = type;
			this.name = name;
		}
		
		public static String tranTime(String index) {
			//String str ="2013/11/12";
			String p = "年|月|日|号|时|/|//-";
			String result = index.replaceAll(p, "-");
			String p2 = "-$";
			String result2 = result.replaceAll(p2, "");
			return result2;
		}
		
		
		/*
		 * public static String tranTime(String index) { DateFormat zhenFormat = new
		 * SimpleDateFormat(ZHEN.name); String result = zhenFormat.format(new Date());
		 * if (index == null || index.length() == 0) return result; Pattern pattern =
		 * Pattern.compile("^[0-9]{8}$"); if (pattern.matcher(index).matches()) { result
		 * = index.substring(0, 4) + "-" + index.substring(4, 6) + "-" +
		 * index.substring(6, 8); return result; } String s =
		 * index.replaceAll("([1-9]+[0-9]*|0)(\\.[\\d]+)?", ""); for (rzTime item :
		 * rzTime.values()) { if (s.indexOf(item.type) != -1) { DateFormat dateFormat =
		 * new SimpleDateFormat(item.name); try { result = new
		 * SimpleDateFormat(ZHEN.name).format(dateFormat.parse(index)); return result; }
		 * catch (ParseException e) { e.printStackTrace(); return result; } } } return
		 * result; }
		 */
		 
		
		
		public static String tranTime2(String result) {
			String isYear ="^(?:(?!0000)[0-9]{4} -(?:(?:0[1-9]|1[0-2]) -(?:0[1-9]|1[0-9]|2[0-8]) |(?:0[13-9]|1[0-2]) -(?:29|30) |(?:0[13578]|1[02]) -31 )|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00) -02 -29 )$";
			Pattern pattern = Pattern.compile(isYear);
			if (pattern.matcher(result).matches()) {
				return result;
			}else {
				 result = new SimpleDateFormat(ZHEN.name).format(new Date());
				return result;
			}
			
		}
	}
	/**
	 * 试用期
	 */
	@Getter
	enum syq implements YgEnumInterface{
		ZERO(0,"无"),ONE(1,"一"),TWO(2,"二"),THREE(3,"三"),FOUR(4,"四"),FIVE(5,"五"),SIX(6,"六");
		
		private Integer type;

		private String name;
		
		syq(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		public static String choose(String index) {
			syq result = syq.ZERO;
			if (index == null || index.length() == 0) result.type.toString();
			for (syq item : syq.values()) {
				if (index.indexOf(item.getName()) !=-1 ||index.indexOf(item.getType()) !=-1 ) result=item;
			}
			return result.type.toString();
		}
	}
	
	/**
	 * 工龄
	 */
	@Getter
	enum workage implements YgEnumInterface{
		//NEW(0,183),HALF(1,365),ONE(2,548),ONEHALF(3,730),TWO(4,913),LONG(5,10000);
		NEW(0,30,0),ROOKIE(31,183,0),HALF(184,365,0),ONE(366,548,0),ONEHALF(549,730,0),TWO(731,1000,0),LONG(1001,10000,0);
		private Integer begin;
		private Integer end;
		private Integer number;
		workage(Integer begin, Integer end,Integer number) {
			this.begin = begin;
			this.end = end;
			this.number = number;
		}
		public static Map<String, Integer> choose(List<YgbintuDto> bintu) {
			for (YgbintuDto b : bintu) {
				Integer index = b.getWorkage();
				for (workage item : workage.values()) {
					if (index>= item.begin && index<=item.end) item.number++;
				}
			}
			Map<String, Integer> result = new HashMap<String, Integer>();
			result.put("本月新入职", NEW.number);
			result.put("x<0.5", NEW.number+ROOKIE.number);
			result.put("0.5<x<1", HALF.number);
			result.put("1<x<1.5", ONE.number);
			result.put("1.5<x<2", ONEHALF.number);
			result.put("2<x<3", TWO.number);
			result.put("x++", LONG.number);
			NEW.number=0;ROOKIE.number=0;HALF.number=0;ONE.number=0;ONEHALF.number=0;TWO.number=0;LONG.number=0;
			return result;
		}
	}
	/**
	 * 年龄
	 */
	@Getter
	enum age implements YgEnumInterface{
		//NEW(0,183),HALF(1,365),ONE(2,548),ONEHALF(3,730),TWO(4,913),LONG(5,10000);
		CHILD(1,17,0),TEEN(18,25,0),YOUNG(26,32,0),MAN(33,38,0),MIDDLE(39,45,0),OLD(46,1000,0);
		private Integer begin;
		private Integer end;
		private Integer number;
		age(Integer begin, Integer end,Integer number) {
			this.begin = begin;
			this.end = end;
			this.number = number;
		}
		public static Map<String, Integer> choose(List<YgbintuDto> bintu) {
			Integer average = 0;
			Integer i = 0;
			Integer j = 0;
			for (YgbintuDto b : bintu) {
				Integer index = b.getAge();
				for (; i < age.values().length; i++) {
					if (index>= age.values()[i].begin && index<=age.values()[i].end) age.values()[i].number++;j++;
				}
				average = average + index;
			}
			Map<String, Integer> result = new HashMap<String, Integer>();
			result.put("18以下", CHILD.number);
			result.put("18-25", TEEN.number);
			result.put("25-32", YOUNG.number);
			result.put("32-38", MAN.number);
			result.put("38-45", MIDDLE.number);
			result.put("45以上", OLD.number);
			Integer pInjun = j>0 ?(average/j) :0;
			result.put("平均年龄", pInjun);
			CHILD.number =0;TEEN.number=0;YOUNG.number=0;MAN.number=0;MIDDLE.number=0;OLD.number=0;
			return result;
		}
	}
}