package com.ruoyi.device.service;

import java.util.List;
import com.ruoyi.device.domain.entity.TsbDevice;
import com.ruoyi.device.domain.vo.TsbDeviceHomeVo;

/**
 * 调试宝设备业务层
 *
 * @author lwm
 */
public interface ITsbDeviceService
{
    /**
     * 根据条件分页查询设备数据
     *
     * @param tsbDevice 设备信息（含查询条件及 params 中的生产日期区间等）
     * @return 设备数据集合信息
     */
    public List<TsbDevice> selectTsbDeviceList(TsbDevice tsbDevice);

    /**
     * 首页设备卡片列表（使用部门数据权限区分）
     * 本部门及以下数据权限 = 后台的登录用户（管理员）可以查看多个调试宝设备
     * 仅本人数据权限 = 调试宝的登录用户（运维人员）只可以查看自己的调试宝设备
     */
    public List<TsbDeviceHomeVo> selectTsbDeviceHomeList(TsbDevice tsbDevice);

    /**
     * 按 SN 查询当前用户有操作权限的设备
     * 后台的登录用户（管理员） = 查询是否在 部门及以下数据权限的调试宝设备 中
     * 调试宝的登录用户（运维人员） = 查询是否是 登录用户（运维人员）的调试宝设备
     */
    TsbDevice selectAccessibleDeviceBySn(Long deviceSn);

    /**
     * 根据设备ID查询设备（未删除）
     *
     * @param deviceId 设备ID
     * @return 设备信息
     */
    public TsbDevice selectTsbDeviceById(Long deviceId);

    /**
     * 校验 IMEI 是否唯一（未删除的记录范围内）
     *
     * @param device 设备信息
     * @return 结果
     */
    public boolean checkImeiUnique(TsbDevice device);

    /**
     * 校验设备 SN 是否唯一（未删除的记录范围内）
     *
     * @param device 设备信息
     * @return 结果
     */
    public boolean checkDeviceSnUnique(TsbDevice device);

    /**
     * 新增调试宝设备
     *
     * @param device 设备信息
     * @return 结果
     */
    public int insertTsbDevice(TsbDevice device);

    /**
     * 修改调试宝设备
     *
     * @param device 设备信息
     * @return 结果
     */
    public int updateTsbDevice(TsbDevice device);

    /**
     * 修改设备状态（列表开关，仅需 deviceId、status）
     *
     * @param device 设备信息
     * @return 结果
     */
    public int updateTsbDeviceStatus(TsbDevice device);

    /**
     * 批量逻辑删除设备
     *
     * @param deviceIds 需要删除的设备ID
     * @return 结果
     */
    public int deleteTsbDeviceByIds(Long[] deviceIds);

    /**
     * 强制批量逻辑删除设备：先解除用户绑定，再删除设备
     *
     * @param deviceIds 需要删除的设备ID
     * @return 结果
     */
    public int forceDeleteTsbDeviceByIds(Long[] deviceIds);

}
