package com.sckw.system.util;

import com.sckw.system.model.KwsEntType;

import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * 将企业已绑定类型转为菜单表 using_roles 模糊匹配所需的类型编码（字符串集合）。
 * <p>
 * 与 {@link com.sckw.system.model.KwsMenu#usingRoles} 约定一致：1-供应商 2-采购商 3-4PL 4-3PL
 */
public final class MenuEntTypeForUsingRolesUtil {

    private MenuEntTypeForUsingRolesUtil() {
    }

    /**
     * 去重后的企业类型码（字符串），用于对 using_roles 做 like 条件。
     *
     * @param entTypes 企业多类型行，可为空
     * @return 永不为 null，无数据时返回空表
     */
    public static List<String> toDistinctTypeCodes(List<KwsEntType> entTypes) {
        if (entTypes == null || entTypes.isEmpty()) {
            return Collections.emptyList();
        }
        return entTypes.stream()
                .map(KwsEntType::getType)
                .filter(Objects::nonNull)
                .map(String::valueOf)
                .distinct()
                .collect(Collectors.toList());
    }

    /**
     * 判断 {@code using_roles} 是否与当前登录企业的任一类型编码匹配，语义与菜单查询中
     * {@code LIKE '%code%'} 条件一致（子串包含即可）。
     *
     * @param usingRoles   菜单/按钮表中的适用企业类型字段，可为空
     * @param entTypeCodes 当前登录企业已解析出的类型码列表（如 {@code "1"}、{@code "2"}），不可全为空白
     * @return 任一类型码为 {@code using_roles} 的子串则 true；入参无效或无一匹配则 false
     */
    public static boolean usingRolesMatchesAnyEntType(String usingRoles, List<String> entTypeCodes) {
        if (usingRoles == null || usingRoles.isBlank() || entTypeCodes == null || entTypeCodes.isEmpty()) {
            return false;
        }
        List<String> splitList = java.util.Arrays.asList(usingRoles.split(","));
//        return entTypeCodes.stream()
//                .filter(Objects::nonNull)
//                .map(String::trim)
//                .filter(s -> !s.isEmpty())
//                .anyMatch(usingRoles::contains);

        return splitList.contains(entTypeCodes.get(0));
    }
}