package com.red.circle.wallet.inner.convertor;

import com.red.circle.framework.core.convertor.ConvertorModel;
import com.red.circle.wallet.domain.wallet.BeanReceipt;
import com.red.circle.wallet.domain.wallet.DiamondReceipt;
import com.red.circle.wallet.domain.wallet.RecoveryGoldReceipt;
import com.red.circle.wallet.domain.wallet.RefundBackReceipt;
import com.red.circle.wallet.domain.wallet.RefundReceipt;
import com.red.circle.wallet.domain.wallet.WalletReceipt;
import com.red.circle.wallet.domain.wallet.WalletReceiptHistory;
import com.red.circle.wallet.domain.wallet.WalletReceiptRes;
import com.red.circle.wallet.infra.database.rds.entity.WalletGoldAssetRecord;
import com.red.circle.wallet.infra.database.rds.entity.bean.BeanBalance;
import com.red.circle.wallet.infra.database.rds.entity.bean.BeanIncomeExpenditure;
import com.red.circle.wallet.infra.database.rds.entity.diamond.DiamondBalance;
import com.red.circle.wallet.infra.database.rds.entity.diamond.DiamondRunningWater;
import com.red.circle.wallet.infra.database.rds.entity.freight.FreightAgentReview;
import com.red.circle.wallet.infra.database.rds.entity.freight.FreightBalance;
import com.red.circle.wallet.infra.database.rds.entity.freight.FreightBalanceRunningWater;
import com.red.circle.wallet.infra.database.rds.entity.freight.FreightSeller;
import com.red.circle.wallet.inner.model.tmp.AssetRecordRunningWaterCO;
import com.red.circle.wallet.inner.model.tmp.UserGoldRunningWaterClsTmpCO;
import com.red.circle.wallet.inner.model.tmp.UserGoldRunningWaterTmpCO;
import com.red.circle.wallet.inner.model.cmd.AddBeanIncomeExpenditureCmd;
import com.red.circle.wallet.inner.model.cmd.AddFreightBalanceRunningWaterCmd;
import com.red.circle.wallet.inner.model.cmd.BeanReceiptCmd;
import com.red.circle.wallet.inner.model.cmd.DiamondReceiptCmd;
import com.red.circle.wallet.inner.model.cmd.FreightAgentReviewCmd;
import com.red.circle.wallet.inner.model.cmd.FreightBalanceCmd;
import com.red.circle.wallet.inner.model.cmd.GoldReceiptCmd;
import com.red.circle.wallet.inner.model.cmd.RecoveryGoldReceiptCmd;
import com.red.circle.wallet.inner.model.cmd.RefundBackReceiptCmd;
import com.red.circle.wallet.inner.model.cmd.RefundReceiptCmd;
import com.red.circle.wallet.inner.model.dto.AssetRecordRunningWaterDTO;
import com.red.circle.wallet.inner.model.dto.BeanBalanceDTO;
import com.red.circle.wallet.inner.model.dto.UserBeanIncomeExpenditureDTO;
import com.red.circle.wallet.inner.model.dto.DiamondBalanceDTO;
import com.red.circle.wallet.inner.model.dto.UserDiamondOriginDTO;
import com.red.circle.wallet.inner.model.dto.UserDiamondRunWaterDTO;
import com.red.circle.wallet.inner.model.dto.UserFreightBalanceDTO;
import com.red.circle.wallet.inner.model.dto.UserFreightBalanceRunningWaterDTO;
import com.red.circle.wallet.inner.model.dto.UserFreightSellerDTO;
import com.red.circle.wallet.inner.model.dto.UserGoldRunningWaterClsHistoryDTO;
import com.red.circle.wallet.inner.model.dto.UserGoldRunningWaterHistoryDTO;
import com.red.circle.wallet.inner.model.dto.WalletGoldAssetRecordDTO;
import com.red.circle.wallet.inner.model.dto.WalletReceiptDTO;
import com.red.circle.wallet.inner.model.dto.WalletReceiptResDTO;
import java.util.List;
import org.mapstruct.Mapper;

/**
 * @author pengliang on 2023/12/25
 */
@Mapper(componentModel = ConvertorModel.SPRING)
public interface WalletInnerConvertor {

  List<UserGoldRunningWaterHistoryDTO> toListUserGoldRunningWaterHistoryDTO(
      List<UserGoldRunningWaterTmpCO> co);

  WalletReceiptResDTO toWalletReceiptResDTO(WalletReceiptRes receipt);

  UserFreightBalanceRunningWaterDTO toUserFreightBalanceRunningWaterDTO(
      FreightBalanceRunningWater freightBalanceRunningWater);

  DiamondReceipt toDiamondReceipt(DiamondReceiptCmd cmd);

  BeanReceipt toBeanReceipt(BeanReceiptCmd cmd);

  WalletReceiptDTO toWalletReceiptDTO(WalletReceiptHistory receipt);


  WalletReceipt toGoldReceipt(GoldReceiptCmd cmd);

  RefundReceipt toRefundReceipt(RefundReceiptCmd refundReceiptCmd);

  //GameCouponReceipt toGameCouponReceiptCmd(GameCouponReceiptCmd cmd);

  // WalletReceipt toGoldReceipt(GameCouponReceiptCmd cmd);

  WalletGoldAssetRecordDTO toWalletGoldAssetRecordDTO(WalletGoldAssetRecord walletGoldAssetRecord);

  RefundBackReceipt toRefundBackReceipt(RefundBackReceiptCmd cmd);

  RecoveryGoldReceipt toRecoveryGoldReceipt(RecoveryGoldReceiptCmd cmd);

  BeanBalanceDTO toBeanBalanceDTO(BeanBalance beanBalance);

  UserBeanIncomeExpenditureDTO toUserBeanIncomeExpenditureDTO(
      BeanIncomeExpenditure beanIncomeExpenditure);

  BeanIncomeExpenditure toBeanIncomeExpenditure(AddBeanIncomeExpenditureCmd cmd);

  DiamondBalanceDTO toUserDiamondBalanceDTO(DiamondBalance diamondBalance);

  UserDiamondRunWaterDTO toUserDiamondRunWaterDTO(DiamondRunningWater diamondRunningWater);

  FreightBalance toFreightBalance(FreightBalanceCmd cmd);

  UserFreightBalanceDTO toUserFreightBalanceDTO(FreightBalance freightBalance);

  FreightBalanceRunningWater toFreightBalanceRunningWater(AddFreightBalanceRunningWaterCmd cmd);

  FreightAgentReview toFreightAgentReview(FreightAgentReviewCmd cmd);


  List<UserFreightBalanceRunningWaterDTO> toListUserFreightBalanceRunningWaterDTO(
      List<FreightBalanceRunningWater> freightBalanceRunningWater);

  UserFreightSellerDTO toUserFreightSellerDTO(FreightSeller freightSeller);

  UserDiamondOriginDTO toUserDiamondOriginDTO(DiamondRunningWater diamondRunningWater);


  UserGoldRunningWaterClsHistoryDTO toUserGoldRunningWaterClsHistoryDTO(
      UserGoldRunningWaterClsTmpCO co);

  List<AssetRecordRunningWaterDTO> toListAssetRecordRunningWaterDTO(
      List<AssetRecordRunningWaterCO> cos);

}
