package com.aiotagro.cattletrade.business.utils;

import com.aiotagro.common.core.utils.SecurityUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;

/**
 * 数据权限工具类
 * 
 * @author System
 * @date 2025-10-11
 */
public class DataScopeUtil {
    
    /**
     * 应用数据权限过滤（基于创建人）
     * 超级管理员不过滤，普通用户只能看自己创建的数据
     * 
     * @param wrapper 查询条件包装器
     * @param createdByField 创建人字段
     * @param <T> 实体类型
     */
    public static <T> void applyDataScope(LambdaQueryWrapper<T> wrapper, 
                                          SFunction<T, Integer> createdByField) {
        // 超级管理员不过滤
        if (SecurityUtil.isSuperAdmin()) {
            return;
        }
        
        // 普通用户只能查看自己创建的数据
        Integer currentUserId = SecurityUtil.getCurrentUserId();
        wrapper.eq(createdByField, currentUserId);
    }
    
    /**
     * 应用数据权限过滤（基于创建人或核验人）
     * 用户可以看到自己创建或自己核验的数据
     * 
     * @param wrapper 查询条件包装器
     * @param createdByField 创建人字段
     * @param checkByField 核验人字段
     * @param <T> 实体类型
     */
    public static <T> void applyDataScopeWithChecker(LambdaQueryWrapper<T> wrapper,
                                                     SFunction<T, Integer> createdByField,
                                                     SFunction<T, Integer> checkByField) {
        // 超级管理员不过滤
        if (SecurityUtil.isSuperAdmin()) {
            return;
        }
        
        // 普通用户可以查看自己创建或自己核验的数据
        Integer currentUserId = SecurityUtil.getCurrentUserId();
        wrapper.and(w -> w.eq(createdByField, currentUserId)
                         .or()
                         .eq(checkByField, currentUserId));
    }
}

