package com.ruoyi.web.modules.industryservice.support;

import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;

/**
 * 第三方资产状态码映射为本地 {@code asset_status}（1～4）。
 * <p>
 * 本地枚举：1 正常、2 死淘、3 丢失、4 出栏。第三方可能返回中文文案、
 * 历史数字码（8/9/10/11）或 1～4 直连值。
 * </p>
 */
public final class YakAssetStatusMapper
{
    private YakAssetStatusMapper()
    {
    }

    /**
     * 将第三方状态字符串映射为本地 1～4；无法识别时抛业务异常。
     *
     * @param thirdPartyCode 第三方原始状态（中文或数字字符串）
     */
    public static int mapToLocalStatus(String thirdPartyCode)
    {
        if (StringUtils.isEmpty(thirdPartyCode))
        {
            return YakAssetRules.ASSET_STATUS_MIN;
        }
        String code = thirdPartyCode.trim();
        if (code.matches("\\d+"))
        {
            int n = normalizeLegacyNumericStatus(Integer.parseInt(code));
            YakAssetValidation.validateAssetStatus(n);
            return n;
        }
        switch (code)
        {
            case "正常":
                return 1;
            case "死淘":
                return 2;
            case "丢失":
                return 3;
            case "出栏":
                return 4;
            case "死亡":
            case "淘汰":
                return 2;
            case "已出售":
                return 4;
            case "在养":
            case "生产期":
            case "抵押中":
            case "投保中":
            case "待出栏":
            case "闲置":
                return 1;
            default:
                throw new ServiceException("无法识别的第三方资产状态：" + code);
        }
    }

    /**
     * 兼容第三方历史数字状态：8/9→死淘，10→出栏，11→丢失，其余非 1～4 默认正常。
     */
    public static int normalizeLegacyNumericStatus(int n)
    {
        if (n >= 1 && n <= 4)
        {
            return n;
        }
        switch (n)
        {
            case 8:
            case 9:
                return 2;
            case 10:
                return 4;
            case 11:
                return 3;
            default:
                return 1;
        }
    }
}
