package com.zt.plat.module.qms.resource.device.service;

import com.alibaba.fastjson.JSONObject;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.qms.resource.device.controller.vo.DeviceInfomationPageReqVO;
import com.zt.plat.module.qms.resource.device.controller.vo.DeviceInfomationRespVO;
import com.zt.plat.module.qms.resource.device.controller.vo.DeviceInfomationSaveReqVO;
import com.zt.plat.module.qms.resource.device.controller.vo.DeviceInfomationWithProductVO;
import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceInfoWithBizConfigVO;
import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceInfomationDO;
import jakarta.validation.Valid;

import java.util.List;

/**
 * 设备-设备信息 Service 接口
 *
 * @author 后台管理
 */
public interface DeviceInfomationService {

    CommonResult<DeviceInfomationRespVO> saveDevice(@Valid DeviceInfomationSaveReqVO reqVO);

    //更新设备状态
    CommonResult<DeviceInfomationRespVO> updateDeviceStatus(JSONObject param);

    CommonResult<Boolean> checkDeviceUsable(Long id );

    DeviceInfomationDO getByCode(String code);

    List<DeviceInfomationDO> getListByProductIdList(List<Long> productIds);
    List<DeviceInfomationDO> getListByIds(String ids);

    List<Long> getIdListByProductIdList(List<Long> productIds);


    //查询需要“某个业务类型”的设备列表
    List<DeviceInfoWithBizConfigVO> getListNeedByRule(JSONObject params);

    // 更新设备的生命周期状态
    CommonResult<DeviceInfomationDO> initDeviceStatusByBizType(DeviceInfomationDO info, String bizType, Integer switchState);



    //更新“使用中”状态
    void updateDeviceInUseFlag(Long deviceId, Integer inUseFlag);
//    CommonResult<Boolean> updateDeviceRepairFlag(Long deviceId, Integer repairFlag);
//    CommonResult<Boolean> updateDeviceDemoteFlag(Long deviceId, Integer demoteFlag);
//    CommonResult<Boolean> updateDeviceScrapFlag(Long deviceId, Integer scrapFlag);
//    CommonResult<Boolean> updateDeviceDisableFlag(Long deviceId, Integer disableFlag);
//    CommonResult<Boolean> updateDeviceAcceptFlag(Long deviceId, String acceptFlag);
//    CommonResult<Boolean> updateDeviceLendFlag(Long deviceId, Integer lendFlag);

    void updateBatch(List<DeviceInfomationDO> updateList);

    /**
     * 创建设备-设备信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    DeviceInfomationRespVO createDeviceInfomation(@Valid DeviceInfomationSaveReqVO createReqVO);

    /**
     * 更新设备-设备信息
     *
     * @param updateReqVO 更新信息
     */
    DeviceInfomationDO updateDeviceInfomation(@Valid DeviceInfomationSaveReqVO updateReqVO);
    DeviceInfomationDO updateDeviceInfomation(DeviceInfomationDO entity);

    /**
     * 删除设备-设备信息
     *
     * @param id 编号
     */
    void deleteDeviceInfomation(Long id);

    /**
    * 批量删除设备-设备信息
    *
    * @param ids 编号
    */
    void deleteDeviceInfomationListByIds(List<Long> ids);

    /**
     * 获得设备-设备信息
     *
     * @param id 编号
     * @return 设备-设备信息
     */
    DeviceInfomationDO getDeviceInfomation(Long id);
    DeviceInfomationWithProductVO getDeviceWithProduct(Long id);

    /**
     * 获得设备-设备信息分页
     *
     * @param pageReqVO 分页查询
     * @return 设备-设备信息分页
     */
    PageResult<DeviceInfomationWithProductVO> getDeviceInfomationPage(DeviceInfomationPageReqVO pageReqVO);

}