package com.erp.warehouse.service;

import com.erp.warehouse.client.CloudWmsClient;
import com.erp.warehouse.dto.*;
import com.erp.warehouse.entity.Warehouse;
import com.erp.warehouse.entity.WarehouseTemplateBinding;

import java.util.List;

/**
 * 云仓服务接口
 * 定义云仓订单管理、库存同步等核心功能
 */
public interface CloudWarehouseService {

    // ==================== 仓库管理 ====================

    /**
     * 分页查询仓库列表
     * @param name 仓库名称(模糊查询)
     * @param type 仓库类型: erp/cloud
     * @param page 页码
     * @param limit 每页数量
     * @return 仓库分页列表
     */
    PageResult<Warehouse> listWarehouses(String name, String type, int page, int limit);

    /**
     * 获取仓库详情
     * @param id 仓库ID
     * @return 仓库信息
     */
    Warehouse getWarehouse(Long id);

    /**
     * 创建仓库
     * @param dto 仓库信息
     * @return 创建的仓库
     */
    Warehouse createWarehouse(WarehouseDTO dto);

    /**
     * 更新仓库
     * @param id 仓库ID
     * @param dto 仓库信息
     * @return 更新后的仓库
     */
    Warehouse updateWarehouse(Long id, WarehouseDTO dto);

    /**
     * 删除仓库
     * @param id 仓库ID
     */
    void deleteWarehouse(Long id);

    // ==================== 云仓订单管理 ====================

    /**
     * 推送采购单到云仓
     * @param warehouseId 仓库ID
     * @param purchaseOrder 采购单数据
     * @return 推送结果
     */
    CloudWmsClient.CloudWmsResponse pushPurchaseOrder(Long warehouseId, PurchaseOrderDTO purchaseOrder);

    /**
     * 确认采购入库
     * @param warehouseId 仓库ID
     * @param poOrderNo 采购单号
     * @return 确认结果
     */
    CloudWmsClient.CloudWmsResponse confirmPurchaseOrder(Long warehouseId, String poOrderNo);

    /**
     * 推送销售订单到云仓
     * @param warehouseId 仓库ID
     * @param saleOrder 销售订单数据
     * @return 推送结果
     */
    CloudWmsClient.CloudWmsResponse pushSaleOrder(Long warehouseId, SaleOrderDTO saleOrder);

    // ==================== 云仓库存同步 ====================

    /**
     * 查询单SKU库存
     * @param warehouseId 仓库ID
     * @param skuCode SKU编码
     * @return 库存信息
     */
    Object queryStock(Long warehouseId, String skuCode);

    /**
     * 获取库存列表
     * @param warehouseId 仓库ID
     * @param page 页码
     * @param pageSize 每页数量
     * @return 库存列表
     */
    Object getStockList(Long warehouseId, int page, int pageSize);

    /**
     * 库存调整
     * @param warehouseId 仓库ID
     * @param skuCode SKU编码
     * @param type 调整类型: 1=增加, 2=减少
     * @param quantity 调整数量
     * @param reason 调整原因
     * @return 调整结果
     */
    CloudWmsClient.CloudWmsResponse adjustStock(Long warehouseId, String skuCode, int type, int quantity, String reason);

    /**
     * 获取云仓商品列表
     * @param warehouseId 仓库ID
     * @param page 页码
     * @param pageSize 每页数量
     * @return 商品列表
     */
    Object getGoodsList(Long warehouseId, int page, int pageSize);

    /**
     * 获取商品详情
     * @param warehouseId 仓库ID
     * @param itemId 商品ID
     * @return 商品详情
     */
    Object getGoodsDetail(Long warehouseId, String itemId);

    /**
     * 获取物流轨迹
     * @param warehouseId 仓库ID
     * @param logisticsNo 物流单号
     * @return 物流轨迹
     */
    Object getLogisticsTrace(Long warehouseId, String logisticsNo);

    /**
     * 获取仓库列表(从云仓)
     * @param warehouseId 仓库ID
     * @return 云仓仓库列表
     */
    Object getCloudWarehouseList(Long warehouseId);

    // ==================== 仓库模板绑定 ====================

    /**
     * 获取仓库的模板绑定列表
     * @param warehouseId 仓库ID
     * @return 绑定列表
     */
    List<WarehouseTemplateBinding> getBindings(Long warehouseId);

    /**
     * 创建模板绑定
     * @param warehouseId 仓库ID
     * @param platform 平台
     * @param templateId 模板ID
     * @return 创建的绑定
     */
    WarehouseTemplateBinding createBinding(Long warehouseId, String platform, Long templateId);

    /**
     * 更新模板绑定
     * @param bindingId 绑定ID
     * @param templateId 新模板ID
     * @return 更新后的绑定
     */
    WarehouseTemplateBinding updateBinding(Long bindingId, Long templateId);

    /**
     * 删除模板绑定
     * @param bindingId 绑定ID
     */
    void deleteBinding(Long bindingId);

    // ==================== 云仓连接测试 ====================

    /**
     * 测试云仓连接
     * @param warehouseId 仓库ID
     * @return 连接测试结果
     */
    CloudWmsClient.CloudWmsResponse testConnection(Long warehouseId);

    // ==================== 分页结果 ====================

    /**
     * 分页结果
     */
    @lombok.Data
    @lombok.NoArgsConstructor
    @lombok.AllArgsConstructor
    class PageResult<T> {
        private List<T> list;
        private long total;
        private int currentPage;
        private int lastPage;
    }
}
