package com.jwipc.contract.logic.impl;

import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jwipc.contract.convert.ContractPayStageConvert;
import com.jwipc.contract.dto.ContractPayStageDTO;
import com.jwipc.contract.entity.ContractPayStage;
import com.jwipc.contract.logic.ContractPayStageLogic;
import com.jwipc.contract.model.po.ContractPayStagePO;
import com.jwipc.contract.model.query.ContractPayStageQuery;
import com.jwipc.contract.service.IContractPayStageService;
import com.jwipc.page.PageUtil;
import com.jwipc.page.PageView;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author shenyang.ou
 * @date 2024/6/13 11:14
 * @desc
 */
@Service
@RequiredArgsConstructor
@Slf4j
public class ContractPayStageLogicImpl implements ContractPayStageLogic {
    private final IContractPayStageService contractPayStageService;
    private final ContractPayStageConvert contractPayStageConvert;
    @Override
    public PageView findByPage(ContractPayStageQuery query) {
        final Page<ContractPayStage> dbPage = PageUtil.toPage(query);
        List<ContractPayStagePO> contractPayStagePOS = contractPayStageService.findByPage(dbPage, query);
        List<ContractPayStageDTO> contractPayStageDTOS = contractPayStageConvert.po2DTOList(contractPayStagePOS);
        if (CollectionUtil.isNotEmpty(contractPayStageDTOS)){
            contractPayStageDTOS.forEach(contractPayStageDTO -> {
                contractPayStageDTO.setPaymentUnAmount(contractPayStageDTO.getPaymentAmount().subtract(contractPayStageDTO.getPaymentAlreadyAmount()).subtract(contractPayStageDTO.getPaymentIngAmount()));
            });
        }
        return PageUtil.getPV(contractPayStageDTOS, dbPage.getTotal());
    }

    @Override
    public List<ContractPayStageDTO> listAll(ContractPayStageQuery query) {
        List<ContractPayStagePO> contractPayStagePOS = contractPayStageService.findByPage(null, query);
        List<ContractPayStageDTO> contractPayStageDTOS = contractPayStageConvert.po2DTOList(contractPayStagePOS);
        if (CollectionUtil.isNotEmpty(contractPayStageDTOS)){
            contractPayStageDTOS.forEach(contractPayStageDTO -> {
                contractPayStageDTO.setPaymentUnAmount(contractPayStageDTO.getPaymentAmount().subtract(contractPayStageDTO.getPaymentAlreadyAmount()).subtract(contractPayStageDTO.getPaymentIngAmount()));
            });
        }
        return contractPayStageDTOS;
    }
}
