package com.yc.ship.module.trade.service.orderjzdetail;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yc.ship.framework.common.pojo.PageResult;
import com.yc.ship.module.trade.controller.admin.orderjzdetail.vo.OrderGiftVisitorPageReqVO;
import com.yc.ship.module.trade.controller.admin.orderjzdetail.vo.*;
import com.yc.ship.module.trade.dal.dataobject.orderjzdetail.OrderGiftVisitorDO;

import java.util.List;

/**
 * 蹭送行程游客 Service 接口
 *
 * @author yc
 */
public interface OrderGiftVisitorService {

    /**
     * 创建蹭送行程游客
     *
     * @param createReqVO 创建信息
     * @return 游客ID
     */
    Long createOrderGiftVisitor(OrderGiftVisitorSaveReqVO createReqVO);

    /**
     * 批量创建蹭送行程游客
     *
     * @param createReqVOList 创建信息列表
     * @return 成功数量
     */
    Integer batchCreateOrderGiftVisitor(List<OrderGiftVisitorSaveReqVO> createReqVOList);

    /**
     * 更新蹭送行程游客
     *
     * @param updateReqVO 更新信息
     */
    void updateOrderGiftVisitor(OrderGiftVisitorSaveReqVO updateReqVO);


    /**
     * 获得蹭送行程游客
     *
     * @param id 游客ID
     * @return 蹭送行程游客
     */
    OrderGiftVisitorDO getOrderGiftVisitor(Long id);

    /**
     * 获得蹭送行程游客分页
     *
     * @param pageReqVO 分页查询条件
     * @return 蹭送行程游客分页
     */
    PageResult<OrderGiftVisitorDO> getOrderGiftVisitorPage(OrderGiftVisitorPageReqVO pageReqVO);

    /**
     * 导出蹭送行程接站明细
     *
     * @param pageReqVO 查询条件
     * @return 导出列表
     */
    List<OrderGiftVisitorDO> getExportList(OrderGiftVisitorPageReqVO pageReqVO);

    /**
     * 蹭送行程补登订单分页查询
     *
     * @param pageReqVO 查询条件
     * @return 订单分页结果
     */
    IPage<OrderGiftVisitorDO> getGiftOrderPage(OrderGiftVisitorPageReqVO pageReqVO);

    /**
     * 签到核销
     *
     */
    void signOrderGiftVisitor(OrderGiftVisitorSaveReqVO signReqVO);

    /**
     * 清除签到信息
     *
     * @param id 游客ID
     */
    void cleanSign(Long id);

    /**
     * 批量签到核销（逐个调用单个签到逻辑）
     *
     * @param items 签到信息列表
     * @param signRemark 签到备注
     * @return 成功核销的人数
     */
    Integer batchSignOrderGiftVisitor(List<OrderJzDetailBatchSignReqVO.SignItem> items, String signRemark);




    /**
     * 创建蹭送行程分车（单个）
     *
     * @param createReqVO 创建信息（包含游客ID）
     * @return 分车ID
     */
    Long createGiftDispatch(OrderJzDispatchSaveReqVO createReqVO, Long visitorId);

    /**
     * 批量保存蹭送行程分车
     * 复用 trade_order_jz_dispatch 表，source_type=2
     *
     * @param batchReqVO 批量分车信息
     * @return 成功数量
     */
    Integer batchSaveGiftDispatch(OrderJzDispatchBatchReqVO batchReqVO);

    /**
     * 更新蹭送行程分车
     *
     * @param updateReqVO 更新信息
     */
    void updateGiftDispatch(OrderJzDispatchSaveReqVO updateReqVO);

    /**
     * 删除蹭送行程分车（根据ID）
     *
     * @param id ID
     */
    void deleteGiftDispatchByVisitorId(Long id);

    /**
     * 获得蹭送行程分车记录分页（按分车号分组）
     * 复用 trade_order_jz_dispatch 表，source_type=2
     *
     * @param pageReqVO 分页查询条件
     * @return 分车记录分页
     */
    PageResult<OrderJzDispatchRecordRespVO> getGiftDispatchRecordPage(OrderJzDispatchPageReqVO pageReqVO);

    /**
     * 导出蹭送行程分车记录
     *
     * @param pageReqVO 查询条件
     * @return 导出列表
     */
    List<OrderJzDispatchRecordRespVO> getExportGiftDispatchList(OrderJzDispatchPageReqVO pageReqVO);
}
