package com.gxwebsoft.house.util;

import cn.hutool.core.util.StrUtil;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;

/**
 * 排序场景工具类
 * 用于处理前端传递的排序参数，解决URL编码和字符串匹配问题
 * 
 * @author 科技小王子
 * @since 2025-08-04
 */
public class SortSceneUtil {
    
    /**
     * 标准化排序场景参数
     * @param sortScene 原始排序场景参数
     * @return 标准化后的排序场景参数
     */
    public static String normalizeSortScene(String sortScene) {
        if (StrUtil.isBlank(sortScene)) {
            return null;
        }
        
        // 尝试URL解码
        String decoded = sortScene;
        try {
            // 如果包含%，尝试URL解码
            if (sortScene.contains("%")) {
                decoded = URLDecoder.decode(sortScene, "UTF-8");
            }
        } catch (UnsupportedEncodingException e) {
            // 解码失败，使用原始值
            decoded = sortScene;
        }
        
        // 去除首尾空格
        decoded = decoded.trim();
        
        // 标准化常见的排序场景
        if (decoded.contains("价格") && decoded.contains("低") && decoded.contains("高")) {
            if (decoded.contains("低-高") || decoded.contains("低到高") || decoded.contains("升序")) {
                return "价格(低-高)";
            } else if (decoded.contains("高-低") || decoded.contains("高到低") || decoded.contains("降序")) {
                return "价格(高-低)";
            }
        }
        
        if (decoded.contains("面积") && decoded.contains("小") && decoded.contains("大")) {
            if (decoded.contains("小-大") || decoded.contains("小到大") || decoded.contains("升序")) {
                return "面积(小-大)";
            } else if (decoded.contains("大-小") || decoded.contains("大到小") || decoded.contains("降序")) {
                return "面积(大-小)";
            }
        }
        
        if (decoded.contains("最新") || decoded.contains("时间") || decoded.contains("发布")) {
            return "最新发布";
        }
        
        if (decoded.contains("综合") || decoded.contains("默认")) {
            return "综合排序";
        }
        
        return decoded;
    }
    
    /**
     * 判断是否为价格升序排序
     * @param sortScene 排序场景参数
     * @return true表示价格升序
     */
    public static boolean isPriceAsc(String sortScene) {
        String normalized = normalizeSortScene(sortScene);
        return "价格(低-高)".equals(normalized);
    }
    
    /**
     * 判断是否为价格降序排序
     * @param sortScene 排序场景参数
     * @return true表示价格降序
     */
    public static boolean isPriceDesc(String sortScene) {
        String normalized = normalizeSortScene(sortScene);
        return "价格(高-低)".equals(normalized);
    }
    
    /**
     * 判断是否为面积升序排序
     * @param sortScene 排序场景参数
     * @return true表示面积升序
     */
    public static boolean isAreaAsc(String sortScene) {
        String normalized = normalizeSortScene(sortScene);
        return "面积(小-大)".equals(normalized);
    }
    
    /**
     * 判断是否为面积降序排序
     * @param sortScene 排序场景参数
     * @return true表示面积降序
     */
    public static boolean isAreaDesc(String sortScene) {
        String normalized = normalizeSortScene(sortScene);
        return "面积(大-小)".equals(normalized);
    }
    
    /**
     * 判断是否为最新发布排序
     * @param sortScene 排序场景参数
     * @return true表示最新发布排序
     */
    public static boolean isLatest(String sortScene) {
        String normalized = normalizeSortScene(sortScene);
        return "最新发布".equals(normalized);
    }
    
    /**
     * 判断是否为综合排序
     * @param sortScene 排序场景参数
     * @return true表示综合排序
     */
    public static boolean isComprehensive(String sortScene) {
        String normalized = normalizeSortScene(sortScene);
        return "综合排序".equals(normalized);
    }
}
