package com.mcwl.communityCenter.handler;

import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.mcwl.common.utils.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import org.springframework.stereotype.Component;

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

@Component
@Slf4j
public class CustomTenantHandler implements TenantLineHandler {

    private static final Set<String> tables = new HashSet<>();

    /**
     * 按id隔离
     * 需要根据业务需要进行调整.需要多租户的表名
     */
    static {
        // 通知表
        tables.add("cc_advice");
        // 发布评论表
        tables.add("cc_comment");
        // 评论点赞表
        tables.add("cc_comment_like");
        // 社区表
        tables.add("cc_community");
        // 社区文件表
        tables.add("cc_community_file");
        // 社区文件下载记录表
        tables.add("cc_community_file_log");
        // 社区用户表
        tables.add("cc_community_user");
        // 收益明细
        tables.add("cc_income_info");
        // 邀请表
        tables.add("cc_invite");
        // 发布表
        tables.add("cc_publish");
        // 收藏表
        tables.add("cc_publish_collect");
        // 发布点赞表
        tables.add("cc_publish_like");
        // 提问表
        tables.add("cc_question");
        // 提问评论表
        tables.add("cc_question_comment");



        // 输出表名
        log.info("多租户表:{}", tables);
    }



    @Override
    public Expression getTenantId() {
        // 假设有一个租户上下文，能够从中获取当前用户的租户
        Long tenantId;
        try {
            tenantId = SecurityUtils.getUserId();
        } catch (Exception e) {
            return new LongValue(-1L);
        }
        // 返回租户ID的表达式，LongValue 是 JSQLParser 中表示 bigint 类型的 class
        return new LongValue(tenantId);
    }

    @Override
    public String getTenantIdColumn() {
        return "tenant_id";
    }

    @Override
    public boolean ignoreTable(String tableName) {
        // 根据需要返回是否忽略该表,true:表示忽略，false:需要解析并拼接多租户条件
        return !tables.contains(tableName);
    }

}