package com.ruoyi.tenant.handler;

import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.ruoyi.common.config.TenantConfig;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import lombok.AllArgsConstructor;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.StringValue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 多租户处理器
 *
 * @author fengcheng
 */
@Component
@AllArgsConstructor
public class CommonTenantHandler implements TenantLineHandler {

    @Autowired
    private TenantConfig tenantConfig;

    /**
     * 获取租户ID
     *
     * @return 租户ID
     */
    @Override
    public Expression getTenantId() {
        if (SecurityUtils.getLoginUser() != null) {
            String tenantId = SecurityUtils.getLoginUser().getTenantId();
            if (!StringUtils.isEmpty(tenantId)) {
                return new StringValue(tenantId);
            }
        }
        return new StringValue(tenantConfig.getDefaultTenantId());
    }

    /**
     * 获取租户字段名称
     *
     * @return 租户字段名称
     */
    @Override
    public String getTenantIdColumn() {
        return tenantConfig.getColumn();
    }

    /**
     * 过滤租户表
     *
     * @param tableName 表名
     * @return 是否进行过滤 返回true 表示不进行多租户处理
     */
    @Override
    public boolean ignoreTable(String tableName) {
        if (!tenantConfig.isEnabled()) {
            return true;
        }
        return tenantConfig.getIgnoreTables().contains(tableName);
    }
}
