package com.sw.common.accessory.server.service;

import com.sw.common.accessory.server.dto.*;
import com.sw.common.accessory.server.entity.Accessory;
import com.sw.common.accessory.server.entity.ReturnRecord;
import com.sw.common.core.exception.BusinessException;
import com.sw.common.core.response.Result;
import com.sw.common.mybatisplus.base.BaseService;
import org.checkerframework.checker.units.qual.A;
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;
import java.util.List;

/**
 * @Author
 * @Description：
 * @Date:
 * @Modified By:
 */
@Validated
public interface AccessoryService extends BaseService<Accessory> {
    List<AccessoryDetails> findByEquipmentAccessoryId(Long id, Integer[] statuss, Integer warnStatus);
    List<AccessoryDetails> findByEquipmentAccessoryCode(String equipmentDeviceCode);

    void stockReturn(StockReturn stockReturn);

    /**
     * 辅材唯一码，指定设备下机
     *
     * @param uniqueCode    辅材唯一码
     * @param equipmentCode 设备编号
     */
    void down(String uniqueCode, String equipmentCode, Integer life, Integer accessoryStatus);

    /**
     * 辅材唯一码，指定设备下机
     *
     * @param id 辅材ID
     */
    void down(Long id);

    void cancelStockReturn(Long id);

    void cancelReturnRecordSave(Accessory accessory, ReturnRecord returnRecord);

    void upper(Long id);

    Accessory findByUniqueCode(String uniqueCode);

    /**
     * 指定设备上机
     *
     * @param id            辅材ID
     * @param equipmentCode 设备编号
     */
    void upper(Long id, String equipmentCode, Integer accessoryStatus);

    /**
     * 辅材唯一码，指定设备上机
     *
     * @param uniqueCode    辅材唯一码
     * @param equipmentCode 设备编号
     */
    void upper(String uniqueCode, String equipmentCode, Integer accessoryStatus);

    void batchSwitching(BatchSwitch batchSwitch);

    List<AccessoryDto> findByEquipmentCode(String equipmentCode);

    AccessoryLife life(Long id);

    List<AccessoryDto> findByEquipmentCodeAndStatus(String equipmentCode, int status);

    /**
     * 通过辅材唯一码 判断可不可以上机
     *
     * @param uniqueCode 辅材唯一码
     * @throws BusinessException 不能上机，返回业务异常
     */
    void canUpper(String uniqueCode) throws BusinessException;

    /**
     * 通过设备编号 以及 寿命类型增加寿命
     *
     * @param equipmentCode 设备编号
     * @param lifeType      寿命类型
     * @param life          本次消耗寿命
     * @throws BusinessException 不能上机，返回业务异常
     */
    void consumptionLife(String equipmentCode, Integer lifeType, Integer life);


    void importAccessory(@Valid List<AccessoryImportDto> accessoryImportDtos);

    Result<Void> batchUpper(List<String> eqpNos);

    Result<Void> batchDown(List<String> eqpNos);

    /**
     * @return java.util.List<com.sw.common.accessory.server.dto.AccessoryDto>
     * @Author wupeng
     * @Description 根据设备号批量查询辅料信息
     * @Date 16:32 2024/1/5
     * @Param
     **/
    List<Accessory> findByEquipmentCodeAndStatus(List<String> eqpNos, int status);

    Accessory findByEquipmentCodeAndMaterialCode(String equipmentCode,String materialCode);

    List<AccessoryDetails> findAccessoryDetailsByEquipmentAccessoryId(Long id,Integer[] statuss,Integer status);
}
