package cn.timer.api.config.enuminterface;

import lombok.Getter;

public interface JxglEnumInterface {

	/**
	 * 考核指标 类型 0员工 1部门
	 */
	@Getter
	enum BeingAppraisalType implements JxglEnumInterface {
		EMPLOYEE(0, "员工 "), DEPARTMENT(1, "部门");

		private Integer type;

		private String name;

		BeingAppraisalType(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		
	}
	
	/**
	 * 考核指标 状态 0被考核人 1无需被考核人
	 */
	@Getter
	enum BeingAppraisalSts implements JxglEnumInterface {
		NEED(0, "被考核人"), NOT_NEED(1, "无需被考核人");
		
		private Integer type;
		
		private String name;
		
		BeingAppraisalSts(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		
	}
	
	/**
	 * 考核指标 类型 0 非固定 1 固定
	 */
	@Getter
	enum IndicatorsType implements JxglEnumInterface {
		NOT_FIXATION(0, "非固定 "), FIXATION(1, "固定");
		
		private Integer type;
		
		private String name;
		
		IndicatorsType(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		
	}
	
	/**
	 * 是否可见 0是 1否。评分及评分结果能否被员工看见
	 */
	@Getter
	enum IsVisible implements JxglEnumInterface {
		TRUE(0, "是"), FALSE(1, "否");

		private Integer type;

		private String name;

		IsVisible(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		
	}
	
	
	/**
	 *绩效考核 状态 0目标制定 1绩效评分 2结果确认 3绩效归档 4终止考核
	 */
	@Getter
	enum PerformanceAppraisalSts implements JxglEnumInterface {
		TARGET_SETING(0, "目标制定"), PERFORMANCE_SCORE(1, "绩效评分"), RESULT_VERIFICATION(2, "结果确认"), PERFORMANCE_ARCHIVE(3, "绩效归档"), TERMINATION_ASSESSMENT(4, "终止考核");

		private Integer type;

		private String name;

		PerformanceAppraisalSts(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		
	}
	
	/**
	 *考核 状态 0目标填写 1目标确认 2自评 3上级评分 4 结果确认 5考核完成 6终止考核 7绩效归档
	 */
	@Getter
	enum AppraisalSts implements JxglEnumInterface {
		TARGET_FILL_IN(0, "目标填写"), TARGET_CONFIRMED(1, "目标确认"), 
		SELF_ASSESSMENT(2, "自评"), SUPERIOR_SCORE(3, "上级评分"), 
		RESULT_VERIFICATION(4, "结果确认"),  ASSESSMENT_COMPLETE(5, "考核完成"),
		TERMINATION_ASSESSMENT(6, "终止考核"), PERFORMANCE_ARCHIVE(7, "绩效归档");
		
		private Integer type;

		private String name;

		AppraisalSts(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		
	}
	
	/**
	 *执行人类型 0被考核人 1主管 2指定成员
	 */
	@Getter
	enum ExecuteType implements JxglEnumInterface {
		/**
		 * 0被考核人
		 */
		BEING_APPRAISAL_PERSON(0, "被考核人"), 
		/**
		 * 1主管
		 */
		LEADER(1, "主管"), 
		/**
		 * 2指定成员
		 */
		SPECIFIED_MEMBER(2, "指定成员");
		
		private Integer type;
		
		private String name;
		
		ExecuteType(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		
		public static String getName(int index) {
			ExecuteType[] executeTypes = ExecuteType.values();
			String res = "";
			if (executeTypes.length > index) {
				res = executeTypes[index].getName();
			}
			return res;
		}
		
	}
	
	/**
	 *流程类型 0目标填写 1目标确认 2自评 3上级评分 4 结果确认
	 */
	@Getter
	enum ProcessType implements JxglEnumInterface {
		TARGET_FILL_IN(0, "目标填写"), TARGET_CONFIRMED(1, "目标确认"), SELF_ASSESSMENT(2, "自评"), SUPERIOR_SCORE(3, "上级评分"), RESULT_VERIFICATION(4, "结果确认");
		
		private Integer type;
		
		private String name;
		
		ProcessType(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		
	}
	
	/**
	 *主管层级 0直属主管 1上上级主管
	 */
	@Getter
	enum LeaderTier implements JxglEnumInterface {
		FIRST(0, "直属主管"), SECOND(1, "上上级主管");
		
		private Integer type;
		
		private String name;
		
		LeaderTier(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		
	}
	
	/**
	 * 节点状态 0未执行 1执行中 2 已执行 
	 */
	@Getter
	enum ProcessNodeSts implements JxglEnumInterface {
		NON_EXECUTION(0, "未执行"), IN_EXECUTION(1, "执行中"), EXECUTED(2, "已执行 ");
		
		private Integer type;
		
		private String name;
		
		ProcessNodeSts(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		
	}
	
	/**
	 * 评定类型 0自评 1上级评价
	 */
	@Getter
	enum AssessmentType implements JxglEnumInterface {
		SELF_ASSESSMENT(0, "自评"), SUPERIOR_SCORE(1, "上级评价");
		
		private Integer type;
		
		private String name;
		
		AssessmentType(Integer type, String name) {
			this.type = type;
			this.name = name;
		}
		
	}
	
	/**
	 *考核记录 类型 0发起考核 1目标填写 2目标确认 3目标驳回 4自评 5评分驳回 6上级评分 7结果确认 8修改评分 9 考核完成 10 终止考核 11绩效归档
	 */
	@Getter
	enum AppraisalLogType implements JxglEnumInterface {
		START(0, "发起考核"), TARGET_FILL_IN(1, "目标填写"),
		TARGET_CONFIRMED(2, "目标确认"), TARGET_DISMISS(3, "驳回目标"),
		SELF_ASSESSMENT(4, "自评"), SCORE_DISMISS(5, "驳回评分"),
		SUPERIOR_SCORE(6, "上级评分"), RESULT_VERIFICATION(7, "结果确认"),
		UPDATE_SCORE(8, "修改评分"), ASSESSMENT_COMPLETE(9, "考核完成"), 
		TERMINATION_ASSESSMENT(10, "终止考核"),PERFORMANCE_ARCHIVE(11, "绩效归档");

		private Integer type;

		private String name;

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

	/**
	 * 云盘-文件夹类型: 0云盘,1文件夹
	 */
	@Getter
	enum DiskCatalogueType implements JxglEnumInterface {
		DISK_YUN(0, "云盘"), DISK_FILE(1, "文件夹");

		private Integer type;

		private String name;

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

	}

	/**
	 * 云盘-文件浏览记录类型: 0查看,1下载,2创建
	 */
	@Getter
	enum DiskFilesLogType implements JxglEnumInterface {
		LOOK_LOG(0, "查看"), DOWN_LOAD_LOG(1, "下载"), CREATE_LOG(1, "下载");

		private Integer type;

		private String name;

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

	}
	
}