package com.tmerclub.cloud.common.sharding.proxy;


import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

/**
 * 分片策略辅助组件
 * @author tmerclub
 * @version 1.0
 */
@SuppressWarnings("MethodMayBeStatic")
public class ShardingAlgorithmHelper {

    /**
     * 每个库的分表数量 默认25
     */
    protected static int TABLE_SIZE = 50;


    /**
     * 计算table的后缀
     * @param valueSuffix 分片键的值后三位
     * @return 表名后缀
     */
    public static String getTableSuffix(int valueSuffix) {
        return "_" + valueSuffix % TABLE_SIZE;
    }

    /**
     * 获取真实的表名
     * @param columnValues 分片键的值
     * @return 匹配的表名集合
     */
    public static Set<String> getTableNames(Collection<String> tableNames, Collection<?> columnValues) {
        Set<String> set = new HashSet<>(10);
        for (Object columnValueObj : columnValues) {
            String columnValue = String.valueOf(columnValueObj);
            // 获取用户ID后三位
            String valueSuffix = (columnValue.length() < 3) ? columnValue : columnValue.substring(columnValue.length() - 3);
            String databaseSuffix = ShardingAlgorithmHelper.getTableSuffix(Integer.parseInt(valueSuffix));
            for (String tableName : tableNames) {
                if (tableName.endsWith(databaseSuffix)) {
                    set.add(tableName);
                }
            }
        }
        return set;
    }
}
