package com.xmomen.module.product.model;

/**
 * 该枚举类`ProductLabel`用于定义产品的标签类型。
 * 每个标签都有对应的描述信息和实体字段名，可用于在业务逻辑中区分不同的产品标签。
 */
public enum ProductLabel {

	// 限时抢购标签，描述为"xianShiQiangGou"，对应的实体字段为"XIAN_SHI_QIANG_GOU"
	XIAN_SHI_QIANG_GOU("xianShiQiangGou", "XIAN_SHI_QIANG_GOU"),
	// 新品尝鲜标签，描述为"xinPinChangXian"，对应的实体字段为"XIN_PIN_CHANG_XIAN"
	XIN_PIN_CHANG_XIAN("xinPinChangXian", "XIN_PIN_CHANG_XIAN"),
	// 热卖推荐标签，描述为"reMaiTuiJian"，对应的实体字段为"RE_MAI_TUI_JIAN"
	RE_MAI_TUI_JIAN("reMaiTuiJian", "RE_MAI_TUI_JIAN");

	// 标签的描述信息，用于在业务逻辑中识别该标签
	String desc;
	// 标签对应的实体字段名，可能用于数据库查询或其他操作
	String entityField;

	/**
	 * 获取标签对应的实体字段名
	 * @return 实体字段名
	 */
	public String getEntityField() {
		return this.entityField;
	}

	/**
	 * 获取标签的描述信息
	 * @return 标签的描述信息
	 */
	public String getDesc() {
		return this.desc;
	}

	/**
	 * 枚举类的构造函数，用于初始化标签的描述信息和实体字段名
	 * @param desc 标签的描述信息
	 * @param entityField 标签对应的实体字段名
	 */
	ProductLabel(String desc, String entityField) {
		this.desc = desc;
		this.entityField = entityField;
	}

	/**
	 * 根据描述信息查找对应的`ProductLabel`枚举实例
	 * @param desc 要查找的标签描述信息
	 * @return 匹配的`ProductLabel`枚举实例，如果未找到则返回`null`
	 */
	public static ProductLabel enumOf(String desc) {
		// 获取所有的`ProductLabel`枚举实例
		ProductLabel[] labels = ProductLabel.values();
		// 获取枚举实例的数量
		int length = labels.length;
		// 遍历所有枚举实例
		for (int i = 0; i < length; i++) {
			ProductLabel label = labels[i];
			// 忽略大小写比较描述信息，如果匹配则返回该枚举实例
			if (label.desc.equalsIgnoreCase(desc)) return label;
		}
		// 未找到匹配的枚举实例，返回`null`
		return null;
	}
}