package com.cf.imes.module.system.service.funds.delay;

import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.module.system.controller.admin.funds.delay.vo.PreviouProductDelayRespVO;
import com.cf.imes.module.system.controller.admin.funds.delay.vo.ProductDelayPageReqVO;
import com.cf.imes.module.system.controller.admin.funds.delay.vo.ProductDelayRespVO;
import com.cf.imes.module.system.controller.admin.funds.delay.vo.ProductDelaySaveReqVO;
import com.cf.imes.module.system.dal.dataobject.funds.delay.ProductDelayRecordDO;

import java.util.List;

/**
 * 产品延期 Service
 *
 * @author Gqr
 * @since 2025/9/15 11:21
 */
public interface ProductDelayService {
    /**
     * 创建产品延期
     *
     * @param productDelaySaveReqVO
     */
    Long createProductDelay(ProductDelaySaveReqVO productDelaySaveReqVO);

    /**
     * 获取组织产品延期分页
     *
     * @param pageReqVO
     * @return
     */
    PageResult<ProductDelayRespVO> getPage(ProductDelayPageReqVO pageReqVO);

    /**
     * 查询购买记录下的延期记录
     *
     * @param purchaseId
     * @param organId
     * @return
     */
    List<ProductDelayRespVO> getRecordsByPurchaseId(Long purchaseId, Long organId);

    /**
     * 查询组织产品下有效的延期记录
     *
     * @param productId
     * @param organId
     * @return
     */
    PreviouProductDelayRespVO getActiveRecordsByProductId(Long productId, Long organId);

    /**
     * 批量更新购买记录下的延期记录
     *
     * @param list    需要更新的延期列表
     * @param organId 组织id
     * @param paid    是否要更新为已支付
     */
    void updatePurchaseDelayRecordsPaidAndRemark(List<ProductDelayRecordDO> list, Long organId, Boolean paid);

    /**
     * 更新购买记录下的延期记录为已支付
     *
     * @param purchaseId
     * @param organId
     */
    void updatePurchaseDelayRecordsPaid(Long purchaseId, Long organId);

    /**
     * 重置购买记录下的延期记录的备注
     *
     * @param purchaseId
     * @param organId
     */
    void resetPurchaseDelayRecordsRemark(Long purchaseId, Long organId);

    /**
     * 批量删除延期记录
     *
     * @param ids
     * @param organId
     */
    void deleteProductDelayRecords(List<Long> ids, Long organId);
}
