package com.ruoyi.ss.device.service;

import com.ruoyi.common.core.domain.ValidateResult;
import com.ruoyi.ss.device.domain.DeviceBO;
import com.ruoyi.ss.device.domain.vo.DeviceVO;

import java.util.Collection;
import java.util.List;

/**
 * @author qzz
 * 2024/4/30
 */
public interface DeviceValidator {

    /**
     * 设备编号是否存在
     */
    boolean isExistNo(List<String> deviceNos);

    /**
     * 判断设备是否属于指定用户
     * @param deviceId 设备id
     * @param userId 用户id
     */
    boolean isMch(Long deviceId, Long userId);

    boolean isMch(Collection<Long> deviceIds, Long userId);

    /**
     * 判断是否设备的商户
     */
    boolean isMch(DeviceVO device, Long userId);

    /**
     * 创建前校验
     */
    ValidateResult preCreate(DeviceBO data);

    /**
     * 更新前校验
     */
    ValidateResult preUpdate(DeviceBO data);

    /**
     * APP更新前校验
     */
    ValidateResult preUpdateByApp(DeviceBO data);

    /**
     * 判断SN是否重复
     */
    boolean isRepeatSn(Long deviceId, String sn);

    /**
     * 判断MAC是否重复
     */
    boolean isRepeatMac(Long deviceId, String mac);

//    /**
//     * 后校验
//     */
//    void afterCheck(DeviceVO vo);

//    /**
//     * 校验代理商
//     */
//    void checkAgent(DeviceVO vo);

//    /**
//     * 判断用户是否设备的代理商
//     * @param device 设备
//     * @param userId 用户ID
//     */
//    boolean isAgent(DeviceVO device, Long userId);

    /**
     * 判断判断设备是否有正在使用中的订单
     */
    boolean hasUsingBill(Long deviceId);

    /**
     * 校验MAC
     * @param deviceId
     * @param mac
     * @param mac2
     */
    void checkMac(Long deviceId, String mac, String mac2);

    /**
     * 校验SN
     * @param deviceId
     * @param deviceNo
     */
    void checkSn(Long deviceId, String deviceNo);

    /**
     * 判断代理商是否允许商户开关
     */
    boolean isAgentAllowMchSwitch(DeviceVO device);
}
