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


import com.yc.ship.framework.common.pojo.PageResult;
import com.yc.ship.module.ota.api.dto.*;
import com.yc.ship.module.trade.controller.admin.bill.vo.BillPageReqVO;
import com.yc.ship.module.trade.controller.admin.bill.vo.BillRespVO;
import com.yc.ship.module.trade.controller.admin.bill.vo.BillSaveReqVO;
import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderPageReqVO;
import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderRespVO;
import com.yc.ship.module.trade.dal.dataobject.bill.BillDO;
import com.yc.ship.module.trade.dal.dataobject.bill.BillStoreDO;

import javax.validation.Valid;
import java.util.List;


/**
 * 旅行社账单 Service 接口
 *
 * @author 管理员
 */
public interface BillService {

    /**
     * 创建旅行社账单
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createBill(@Valid BillSaveReqVO createReqVO);

    /**
     * 手动创建旅行社账单
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createBillOrder(@Valid BillSaveReqVO createReqVO);

    /**
     * 更新旅行社账单
     *
     * @param updateReqVO 更新信息
     */
    void updateBill(@Valid BillSaveReqVO updateReqVO);

    /**
     * 删除旅行社账单
     *
     * @param id 编号
     */
    void deleteBill(Long id);

    /**
     * 获得旅行社账单
     *
     * @param id 编号
     * @return 旅行社账单
     */
    BillDO getBill(Long id);
    /**
     * 获得旅行社账单分页
     *
     * @param pageReqVO 分页查询
     * @return 旅行社账单分页
     */
    PageResult<BillRespVO> getBillPage(BillPageReqVO pageReqVO);
    PageResult<BillStoreDO> getBillStorePage(BillPageReqVO pageReqVO);
    List<TradeOrderRespVO> getBillOrderList(Long id, Integer type);

    PageResult<TradeOrderRespVO> getOrderPage(TradeOrderPageReqVO pageReqVO);
    List<BillStoreDO> getStoreBillById(Long id);
    /**
     * 账单支付还款回调
     *
     * @param payReqDTO 支付信息
     * @return 账单还款
     */
    List<DistributorRechargeReqDTO> billPayNotice(BillPayReqDTO payReqDTO);

    /**
     * 旅行社门店下单验证
     *
     * @param billOrderVerifyReqDTO 旅行社门店信息
     * @return 账单还款
     */
    BillOrderVerifyRespDTO billOrderVerify(BillOrderVerifyReqDTO billOrderVerifyReqDTO);

    void billOver();
    Boolean billPayVerification(Long id);

    BillStoreDO getBillStoreById(Long id);

    void resetBillByMarketing(BillResetReqDTO reqDTO);
}