package cn.timer.api.config.enuminterface;

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 io.swagger.annotations.ApiModelProperty;
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 OrgType implements YgEnumInterface {
		DEPARTMENT(0, "部门"), POST(1, "岗位");
		
		private Integer type;
		
		private String name;
		
		OrgType(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		
	}
	
	/**
	 * 员工类型
	 */
	@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";
			if (index == null) {
				return null;
			}

			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;
		}
	}
}