package com.awspaas.user.apps.bnbm.datalinkup.util;

import com.awspaas.user.apps.bnbm.datalinkup.service.impl.SaleDataSyncServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 采购模块工具类
 */
public class PurchaseUtil {
    private static final Logger LOGGER = LoggerFactory.getLogger(PurchaseUtil.class);

    /**
     * 判断物料名称所属分类
     * @param bkgs 板块名称
     * @param wlmc 物料名称
     * @param wlbm 物料编码
     * @param jldw 计量单位
     * @param djhyf 单价含运费
     * @param wlfl 物料分类
     * @return newWlmc 物料名称
     */
    public static String materialClassificationFiltering(String bkgs, String wlmc, String wlbm, String jldw, Double djhyf, String wlfl) {
        String newWlmc = "";
        try {
            // 脱硫石膏
            if (("龙牌".equals(bkgs) || "梦牌".equals(bkgs) || "泰山石膏".equals(bkgs)) && wlmc.contains("脱硫石膏")) {
                newWlmc = "脱硫石膏";
            }
            // 镀锌带钢
            else if ("泰山石膏".equals(bkgs) && wlmc.contains("镀锌带钢")) {
                newWlmc = "镀锌带钢";
            } else if (("龙牌".equals(bkgs) || "梦牌".equals(bkgs))
                    && (wlmc.equals("轻钢镀锌带钢") || wlmc.equals("镀锌带钢"))) {
                newWlmc = "镀锌带钢";
            }
            // 煤炭
            else if (("龙牌".equals(bkgs) || "梦牌".equals(bkgs))
                    && (wlmc.contains("煤炭") || wlmc.contains("籽煤") || wlmc.contains("褐煤"))) {
                newWlmc = "煤炭";
            } else if ("泰山石膏".equals(bkgs) && (wlmc.contains("原煤") || wlmc.contains("水洗精煤") || wlmc.contains("褐煤"))) {
                newWlmc = "煤炭";
            }
            // 护面纸
            else if (("龙牌".equals(bkgs) || "泰山石膏".equals(bkgs))
                    && wlmc.contains("护面纸")) {
                newWlmc = "护面纸";
            }
            // 乳液
            else if ("北新嘉宝莉".equals(bkgs) && wlbm.startsWith("11M")) {
                newWlmc = "乳液";
            } else if ("北新防水".equals(bkgs) && wlbm.startsWith("5070201")) {
                newWlmc = "乳液";
            } else if ("北新涂料".equals(bkgs) && wlbm.contains("10114137")) {
                newWlmc = "乳液";
            }
            // 钛白粉
            else if (("北新防水".equals(bkgs) || "北新涂料".equals(bkgs)) && wlmc.contains("钛白粉")) {
                newWlmc = "钛白粉";
            } else if ("北新嘉宝莉".equals(bkgs) && wlbm.startsWith("11PT")) {
                newWlmc = "钛白粉";
            }
            // 重钙
            else if (("北新防水".equals(bkgs) || "北新涂料".equals(bkgs)) && wlmc.contains("重钙")) {
                newWlmc = "重钙";
            } else if ("北新嘉宝莉".equals(bkgs) && wlbm.startsWith("11TD")) {
                newWlmc = "重钙";
            }
            // 包装袋
            else if ("龙牌".equals(bkgs) && jldw.contains("条") && (wlmc.equals("编织袋") || wlmc.equals("阀口袋") || wlmc.equals("两纸一膜")
                    || wlmc.contains("三纸一膜") || wlmc.contains("包装袋") || wlmc.contains("包装"))) {
                newWlmc = "包装袋";
            } else if ("泰山石膏".equals(bkgs) && ( jldw.contains("条") || jldw.contains("根")) && (wlmc.contains("编织袋") || wlmc.contains("纸袋"))) {
                newWlmc = "包装袋";
            } else if ("梦牌".equals(bkgs) && jldw.contains("条") && wlmc.contains("包装袋") && (!wlbm.contains("000000000024499") && !wlbm.contains("102327250000199"))) {
                newWlmc = "包装袋";
            } else if ("北新防水".equals(bkgs) && ( jldw.contains("条") || jldw.contains("个")) && (wlmc.contains("包装袋") || wlmc.contains("阀口袋"))
                    && (!wlbm.contains("60303000157001") && !wlbm.contains("60804000151117") && !wlbm.contains("60303000028798")
                    && !wlbm.contains("60303000028800") && !wlbm.contains("60303000028811") && !wlbm.contains("60804000151102")
                    && !wlbm.contains("50603010005") && !wlbm.contains("50603010006"))
            ) {
                newWlmc = "包装袋";
            } else if ("北新涂料".equals(bkgs) && jldw.contains("只") && wlmc.contains("包装袋")) {
                newWlmc = "包装袋";
            } else if ("北新嘉宝莉".equals(bkgs) && ( jldw.contains("条") || jldw.contains("个")) && (wlmc.contains("阀口袋") || wlmc.contains("腻子粉袋") || wlmc.contains("阀口纸袋")
                    || wlmc.equals("纸袋") || wlmc.equals("编织袋"))) {
                newWlmc = "包装袋";
            }
            // 包装桶
            else if ("龙牌".equals(bkgs) && wlbm.contains("1023411")) {
                newWlmc = "包装桶";
            } else if ("北新防水".equals(bkgs) && wlmc.contains("桶") && jldw.contains("个")) {
                newWlmc = "包装桶";
            } else if ("北新嘉宝莉".equals(bkgs) && wlmc.contains("盖") && !wlmc.contains("桶") && !wlmc.contains("罐") && djhyf < 3.5) {
                newWlmc = "桶盖";
            } else if ("北新嘉宝莉".equals(bkgs) && wlmc.contains("桶身") && jldw.equals("个")) {
                newWlmc = "包装桶";
            } else if ("北新嘉宝莉".equals(bkgs) && wlmc.contains("桶") && !wlmc.contains("桶身") && djhyf>3.5 && jldw.equals("个")) {
                newWlmc = "包装桶";
            } else if ("北新嘉宝莉".equals(bkgs) && wlmc.contains("罐") && !wlmc.contains("箱") && jldw.equals("个")) {
                newWlmc = "包装桶";
            } else {
                newWlmc = wlmc;
            }

        }catch (Exception e){
            LOGGER.info("物料分类报错：{}\n{}",e.getMessage(),e);
            e.printStackTrace();
        }
        return newWlmc;
    }

    /**
     * 生产入库更新石膏板种类
     * @param wlfl
     * @param cpmc
     * @param xl
     * @param pp
     * @param zl
     * @return
     */
    public static String gypsumBoardCategory(String wlfl, String cpmc, String xl, String pp, String zl){
        if (wlfl.startsWith("58001002")){
            return "基材";
        } else if (xl.equals("然系列")) {
            return "然系列";
        } else if (xl.equals("泰山系列") && pp.equals("泰山") && zl.contains("耐火") && !zl.startsWith("耐水")) {
            return "泰山耐火系列";
        } else if (xl.equals("泰山系列") && pp.equals("泰山") && zl.contains("耐水") && !zl.startsWith("耐火")) {
            return "泰山耐水系列";
        } else if (wlfl.startsWith("58008") || wlfl.startsWith("58009") || wlfl.startsWith("58012")) {
            return "GFP/GFG（高密高强）";
        } else if (cpmc.startsWith("纸面石膏板(墙板)") && xl.equals("泰山系列") && pp.equals("泰山")
                && (zl.equals("观日出") || zl.equals("盘云海") || zl.equals("黄金带") || zl.equals("凌云松")
                || zl.equals("岱盘石") || zl.equals("银河水"))) {
            return "印象泰山系列";
        } else if (cpmc.startsWith("纸面石膏板(墙板)") && xl.equals("泰山系列") && pp.equals("泰山")
                && (zl.equals("灵鼠献瑞") || zl.equals("福牛贺喜") || zl.equals("虎虎生威") || zl.equals("玉兔拜月")
                || zl.equals("龙凤呈祥") || zl.equals("银蛇报春") || zl.equals("马到成功") || zl.equals("三羊开泰") || zl.equals("金猴送宝")
                || zl.equals("金鸡报晓") || zl.equals("旺狗招财") || zl.equals("金猪送福") )) {
            return "十二生肖系列";
        } else if (cpmc.startsWith("纸面石膏板(墙板)") && xl.equals("泰山系列") && pp.equals("泰山") && zl.equals("金砖")) {
            return "金砖系列";
        } else {
            return "金砖系列";
        }
    }

    /**
     * 从字符串中提取厚度值 - 支持多种格式
     * @param input 输入字符串
     * @return 提取到的厚度值，如9.5，如果未找到返回null
     */
    public static String extractThickness(String input) {
        if (input == null || input.trim().isEmpty()) {
            return null;
        }

        // 统一将"×"替换为"*"，便于处理
        String normalizedInput = input.replace('×', '*');
        // 模式1：数字*数字*数字.mm（可能包含括号内容）
        Pattern pattern1 = Pattern.compile("(\\d+)\\*(\\d+)\\*(\\d+(?:\\.\\d+)?)mm");

        // 模式2：数字*数字*数字.字母******（如9.5A******）
        Pattern pattern2 = Pattern.compile("(\\d+)\\*(\\d+)\\*(\\d+(?:\\.\\d+)?)[A-Z]\\*+");

        // 模式3：数字*数字*数字.空格（如10.0 100张/架）
        Pattern pattern3 = Pattern.compile("(\\d+)\\*(\\d+)\\*(\\d+(?:\\.\\d+)?)\\s");

        // 模式4：直接匹配厚度值（最通用的模式）
        Pattern pattern4 = Pattern.compile("\\*(\\d+(?:\\.\\d+)?)(?:mm|[A-Z]|\\s|$)");


        Matcher matcher;

        // 尝试模式1
        matcher = pattern1.matcher(normalizedInput);
        if (matcher.find() && matcher.groupCount() >= 3) {
            try {
                return matcher.group(3);
            } catch (NumberFormatException e) {
                // 继续尝试其他模式
            }
        }

        // 尝试模式2
        matcher = pattern2.matcher(input);
        if (matcher.find() && matcher.groupCount() >= 3) {
            try {
                return matcher.group(3);
            } catch (NumberFormatException e) {
                // 继续尝试其他模式
            }
        }

        // 尝试模式3
        matcher = pattern3.matcher(input);
        if (matcher.find() && matcher.groupCount() >= 3) {
            try {
                return matcher.group(3);
            } catch (NumberFormatException e) {
                // 继续尝试其他模式
            }
        }

        // 尝试模式4（最通用的模式）
        matcher = pattern4.matcher(input);
        if (matcher.find()) {
            try {
                return matcher.group(1);
            } catch (NumberFormatException e) {
                return null;
            }
        }

        return null;
    }

    /**
     * 判断两个数是否想到
     * @param obj1
     * @param obj2
     * @return
     */
    public static boolean isEqual(Object obj1, Object obj2) {
        if (obj1 == null && obj2 == null) return true;
        if (obj1 == null || obj2 == null) return false;
        return obj1.equals(obj2);
    }
}
