package com.aegis.resource.equipment.service;

import java.util.List;
import com.aegis.resource.equipment.domain.Equipment;
import com.aegis.resource.equipment.domain.EquipmentLog;

/**
 * 装备Service接口
 * 
 * @author aegis
 */
public interface IResourceEquipmentService {

    /**
     * 查询装备列表
     * 
     * @param equipment 装备信息
     * @return 装备集合
     */
    public List<Equipment> selectEquipmentList(Equipment equipment);

    /**
     * 根据ID查询装备
     * 
     * @param id 装备ID
     * @return 装备信息
     */
    public Equipment selectEquipmentById(Long id);

    /**
     * 根据队伍ID查询装备列表
     * 
     * @param teamId 队伍ID
     * @return 装备集合
     */
    public List<Equipment> selectEquipmentListByTeamId(Long teamId);

    /**
     * 校验装备编码是否唯一
     * 
     * @param equipment 装备信息
     * @return 结果
     */
    public boolean checkEquipmentCodeUnique(Equipment equipment);

    /**
     * 新增装备
     * 
     * @param equipment 装备信息
     * @return 结果
     */
    public int insertEquipment(Equipment equipment);

    /**
     * 修改装备
     * 
     * @param equipment 装备信息
     * @return 结果
     */
    public int updateEquipment(Equipment equipment);

    /**
     * 分配占用（available → busy）
     * 
     * @param id 装备ID
     * @param dispatchId 调度ID（可选）
     * @param eventId 事件ID（可选）
     * @param remark 备注
     * @return 结果
     */
    public int assignEquipment(Long id, Long dispatchId, Long eventId, String remark);

    /**
     * 解除占用（busy → available）
     * 
     * @param id 装备ID
     * @param remark 备注
     * @return 结果
     */
    public int releaseEquipment(Long id, String remark);

    /**
     * 送修（available/busy → repair）
     * 
     * @param id 装备ID
     * @param remark 备注
     * @return 结果
     */
    public int sendRepair(Long id, String remark);

    /**
     * 修复完成（repair → available）
     * 
     * @param id 装备ID
     * @param remark 备注
     * @return 结果
     */
    public int finishRepair(Long id, String remark);

    /**
     * 报废（→ scrap，终态）
     * 
     * @param id 装备ID
     * @param remark 备注
     * @return 结果
     */
    public int scrapEquipment(Long id, String remark);

    /**
     * 批量删除装备
     * 
     * @param ids 需要删除的装备ID数组
     * @return 结果
     */
    public int deleteEquipmentByIds(Long[] ids);

    /**
     * 删除装备信息
     * 
     * @param id 装备ID
     * @return 结果
     */
    public int deleteEquipmentById(Long id);

    /**
     * 查询装备操作日志列表
     * 
     * @param log 日志信息
     * @return 日志集合
     */
    public List<EquipmentLog> selectEquipmentLogList(EquipmentLog log);

    /**
     * 根据装备ID查询日志列表
     * 
     * @param equipmentId 装备ID
     * @return 日志集合
     */
    public List<EquipmentLog> selectEquipmentLogListByEquipmentId(Long equipmentId);
}