package com.ruoyi.device.mapper;

import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.device.domain.entity.TsbUserDevice;
import com.ruoyi.device.domain.model.TsbUserDeviceBind;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 调试宝设备用户绑定Mapper
 *
 * @author lwm
 */
public interface TsbUserDeviceMapper
{

    /**
     * 查询用户与设备绑定列表（联表用户、设备）
     *
     * @param userDeviceBind 查询参数
     * @return 绑定关系集合信息
     */
    TsbUserDeviceBind selectTsbUserDeviceBind(TsbUserDeviceBind userDeviceBind);

    /**
     * 查询指定设备当前绑定
     *
     * @param deviceId 设备ID
     * @return 绑定关系
     */
    TsbUserDeviceBind selectBindByDeviceId(Long deviceId);

    /**
     * 查询指定用户当前绑定
     *
     * @param userId 用户ID
     * @return 绑定关系
     */
    TsbUserDeviceBind selectBindByUserId(Long userId);

    /**
     * 未绑定任何调试宝设备的用户列表（用于下拉）
     * 当前用户的可选择用户 再 去掉已经绑定的用户
     *
     * @return 用户列表
     */
    List<SysUser> selectUnbindUsers(TsbUserDevice bind);

    /**
     * 通过用户id 查询设备绑定关系
     *
     * @param userId   用户ID
     * @return 绑定关系
     */
    TsbUserDevice selectByUserId(Long userId);

    /**
     * 通过设备id 获取设备绑定关系
     *
     * @param deviceId 设备ID
     * @return 绑定关系
     */
    TsbUserDevice selectByDeviceId(Long deviceId);

    /**
     * 用户与设备绑定
     *
     * @param bind 绑定关系
     * @return 绑定结果
     */
    int insertTsbUserDevice(TsbUserDevice bind);

    /**
     * 用户与设备解绑
     *
     * @param userId   用户ID
     * @param deviceId 设备ID
     * @return 解绑结果
     */
    int deleteUserDevice(@Param("userId")Long userId, @Param("deviceId")Long deviceId);

    /**
     * 统计该设备的绑定条数（删除前校验用）
     *
     * @param deviceId 设备主键
     * @return 绑定数量
     */
    int countBindByDeviceId(Long deviceId);

    /**
     * 按设备主键批量删除绑定（强制删设备前清理关联）
     *
     * @param deviceIds 设备主键数组
     * @return 影响行数
     */
    int deleteTsbUserDeviceByDeviceIds(Long[] deviceIds);

    /**
     * 按用户ID批量删除绑定（删除用户前清理关联）
     *
     * @param userIds 用户ID数组
     * @return 影响行数
     */
    int deleteTsbUserDeviceByUserIds(Long[] userIds);
}
