package com.cf.imes.module.executor.service.ordercomponent;

import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPrintListReqVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPrintRespVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrdersViewCadViewInfoRespVO;
import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderComponentRespVO;
import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderDetailComponentListReqVO;
import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderDetailComponentPageReqVO;
import com.cf.imes.module.executor.controller.admin.plate.vo.OrderViewPartPageRespVO;
import com.cf.imes.module.executor.controller.admin.plate.vo.OrderViewPlatePageRespVO;

import java.util.List;

/**
 * 订单部件服务 Service
 *
 * @author Gqr
 * @since 2026/1/27 14:32
 */
public interface OrderComponentService {
    /**
     * 查询订单部件列表
     *
     * @param reqVO
     * @return
     */
    List<OrderComponentRespVO> getOrderComponentList(OrderDetailComponentListReqVO reqVO);

    /**
     * 获取节点的顶级节点下所有节点
     *
     * @param reqVO
     * @return
     */
    List<OrderComponentRespVO> getComponentListOnTopId(OrderDetailComponentListReqVO reqVO);

    /**
     * 获取部件下板件视图分页列表
     *
     * @param reqVO
     * @return
     */
    PageResult<OrderViewPlatePageRespVO> getViewComponentPlatesPage(OrderDetailComponentPageReqVO reqVO);

    /**
     * 获取部件下配件分页列表
     *
     * @param reqVO
     * @return
     */
    PageResult<OrderViewPartPageRespVO> getViewComponentPartsPage(OrderDetailComponentPageReqVO reqVO);

    /**
     * 获取部件和下级所有的板件视图列表
     *
     * @param reqVO
     * @return
     */
    OrdersViewCadViewInfoRespVO getViewComponentCadInfo(OrderDetailComponentPageReqVO reqVO);

    /**
     * 删除部件
     *
     * @param id
     */
    void deleteOrderComponent(Long orderId, Long id);

    /**
     * 恢复部件
     *
     * @param orderId
     * @param id
     */
    void restoreOrderComponent(Long orderId, Long id);

    /**
     * 查询订单列表下所有部件
     *
     * @param orderIds
     * @return
     */
    List<OrderComponentRespVO> getOrderComponentListOnOrders(List<Long> orderIds, Long... organId);

    /**
     * 查询部件下所有子部件
     *
     * @param id
     * @return
     */
    List<OrderComponentRespVO> getChildComponentListOnTopId(Long id);

    /**
     * 查询部件归属的顶级部件的所有子部件id列表
     *
     * @param id
     * @return
     */
    List<Long> getChildComponentIdsOnTopId(Long id);

    /**
     * 查询部件归属的父部件和其下所有子部件id列表
     *
     * @param id
     * @return
     */
    List<Long> getChildComponentIdsOnMy(Long id);

    /**
     * 查询订单下板件+配件详情
     *
     * @param pageReqVO 房间id列表+部件id列表
     * @return
     */
    OrdersViewCadViewInfoRespVO getOrderViewCadInfo(OrderDetailComponentPageReqVO pageReqVO);

    /**
     * 查询部件打印信息
     *
     * @param pageReqVO
     * @return
     */
    OrderPrintRespVO getOrderComponentPrintList(OrderPrintListReqVO pageReqVO);
}