package com.fuyuanshen.equipment.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fuyuanshen.common.core.domain.PageResult;
import com.fuyuanshen.common.mybatis.core.page.PageQuery;
import com.fuyuanshen.common.mybatis.core.page.TableDataInfo;
import com.fuyuanshen.equipment.domain.Device;
import com.fuyuanshen.equipment.domain.dto.AppDeviceBo;
import com.fuyuanshen.equipment.domain.form.DeviceForm;
import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria;
import com.fuyuanshen.equipment.domain.vo.AppDeviceVo;
import com.fuyuanshen.equipment.domain.vo.CustomerVo;

import java.io.IOException;
import java.util.List;

/**
 * @Description:
 * @Author: WY
 * @Date: 2025/5/16
 **/
public interface DeviceService extends IService<Device> {

    /**
     * 查询设备数据分页
     *
     * @param criteria 条件
     * @param page     分页参数
     * @return PageResult
     */
    TableDataInfo<Device> queryAll(DeviceQueryCriteria criteria, Page<Device> page) throws IOException;

    /**
     * 查询所有数据不分页
     *
     * @param criteria 条件参数
     * @return List<DeviceDto>
     */
    List<Device> queryAll(DeviceQueryCriteria criteria);

    /**
     * 查询所有设备信息
     *
     * @param criteria
     * @return
     */
    List<Device> queryAllDevices(DeviceQueryCriteria criteria);

    /**
     * 新增设备
     *
     * @param resources
     */
    void addDevice(DeviceForm resources) throws Exception;

    /**
     * 修改设备
     *
     * @param resources /
     */
    void update(DeviceForm resources) throws Exception;

    /**
     * 批量删除
     *
     * @param ids /
     */
    void deleteAll(List<Long> ids);

    /**
     * 分配客户
     */
    void assignCustomer(CustomerVo customerVo);

    /**
     * 撤回设备
     */
    void withdrawDevice(List<Long> ids);

    /**
     * 解绑设备
     *
     * @param deviceForm
     */
    void unbindDevice(DeviceForm deviceForm);


    /**
     * WEB端查看APP客户设备绑定
     *
     * @param bo
     * @param pageQuery
     * @return
     */
    TableDataInfo<AppDeviceVo> queryAppDeviceList(DeviceQueryCriteria bo, PageQuery pageQuery);

    int bindDevice(AppDeviceBo bo);

    int unBindDevice(Long id);

    /**
     * 检查设备MAC值是否存在
     *
     * @param mac
     * @return
     */
    Boolean queryDevice(String mac);

    /**
     * WEB端解绑设备
     *
     * @param id
     * @return
     */
    int webUnBindDevice(Long id);

}
