package com.haha.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.haha.entity.ReplenishmentOrder;
import com.haha.entity.ReplenishmentOrderItem;
import com.haha.entity.dto.ReplenishmentOrderCreateDTO;
import com.haha.entity.dto.ReplenishmentOrderQueryDTO;
import com.haha.entity.dto.ReplenishmentOrderUpdateDTO;

import com.haha.entity.dto.ReplenishmentSuggestionVO;

import java.util.List;

/**
 * 补货单服务接口
 */
public interface ReplenishmentOrderService extends IService<ReplenishmentOrder> {

    /**
     * 分页查询补货单
     */
    IPage<ReplenishmentOrder> getPage(ReplenishmentOrderQueryDTO queryDTO);

    /**
     * 获取补货单详情（含明细）
     */
    ReplenishmentOrder getDetailWithItems(Long id);

    /**
     * 获取补货单的明细列表
     */
    List<ReplenishmentOrderItem> getItems(Long orderId);

    /**
     * 创建补货单
     */
    ReplenishmentOrder createOrder(ReplenishmentOrderCreateDTO dto, Long creatorId, String creatorName);

    /**
     * 更新补货单（仅草稿状态可更新）
     */
    ReplenishmentOrder updateOrder(ReplenishmentOrderUpdateDTO dto);

    /**
     * 删除补货单（仅草稿状态可删除）
     */
    void deleteOrder(Long id);

    /**
     * 提交补货单（草稿→已提交）
     */
    ReplenishmentOrder submitOrder(Long id);

    /**
     * 同步到ERP（已提交→已同步ERP）
     */
    ReplenishmentOrder syncToErp(Long id);

    /**
     * 完成补货单（已同步ERP→已完成）
     */
    ReplenishmentOrder completeOrder(Long id);

    /**
     * 取消补货单（草稿/已提交→已取消）
     */
    ReplenishmentOrder cancelOrder(Long id);

    /**
     * 根据设备ID列表获取补货建议
     * 计算规则：层模版标准库存 - 当前实际库存，只返回 > 0 的项
     */
    List<ReplenishmentSuggestionVO> getSuggestions(List<String> deviceIds);
}
