package com.xmomen.module.product.model;

/**
 * 该枚举类用于产品查询时的过滤或排序操作。
 * 可以根据枚举值来确定查询时使用的字段和条件。
 * @author xiao
 */
public enum ProductQueryFilter {

	// 按照价格进行过滤或排序，描述为 "price"，对应的数据库字段为 "SELL_PRICE"
	PRICE("price", "SELL_PRICE");

	// 枚举值的描述，用于在业务逻辑中方便识别该枚举值
	private String desc;
	// 对应的数据库字段名，用于实际的 SQL 查询
	private String fieldName;
	// 查询条件，可能用于构建更复杂的 SQL 查询，初始值可为 null
	private String condition;

	/**
	 * 构造函数，初始化描述和字段名，条件默认为 null
	 * @param desc 枚举值的描述
	 * @param fieldName 对应的数据库字段名
	 */
	ProductQueryFilter(String desc, String fieldName) {
		this(desc, fieldName, null);
	}

	/**
	 * 构造函数，初始化描述、字段名和查询条件
	 * @param desc 枚举值的描述
	 * @param fieldName 对应的数据库字段名
	 * @param condition 查询条件
	 */
	ProductQueryFilter(String desc, String fieldName, String condition) {
		this.desc = desc;
		this.fieldName = fieldName;
		this.condition = condition;
	}

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

	/**
	 * 获取对应的数据库字段名
	 * @return 数据库字段名
	 */
	public String getFieldName() {
		return this.fieldName;
	}

	/**
	 * 获取查询条件
	 * @return 查询条件
	 */
	public String getCondition() {
		return this.condition;
	}

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