package com.hzs.member.account;

import com.hzs.common.core.domain.R;
import com.hzs.common.domain.member.account.CuMemberAccount;
import com.hzs.common.domain.member.account.CuMemberTrade;
import com.hzs.common.domain.member.ext.CuMemberAccountExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.order.SaOrder;

import java.math.BigDecimal;
import java.util.List;

/**
 * 会员账户提供api操作实体
 */
public interface IMemberAccountServiceApi {

    /**
     * 查询会员账户状态，账户信息
     *
     * @param cuMemberAccount 会员账户条件信息
     */
    R<List<CuMemberAccountExt>> queryMemberAccountByCondition(CuMemberAccount cuMemberAccount);

    /**
     * 根据会员id 列表查询账户信息
     *
     * @param pkMemberList 列表
     */
    R<List<CuMemberAccount>> queryCuMemberAccountByPkMembers(List<Long> pkMemberList);

    /**
     * 订单调换货物扣费处理
     *
     * @param saOrder     订单
     * @param updateOrder 新订单
     * @param userId      操作人ID
     * @param obj         追加后续业务实体
     * @return
     */
    R orderChangeProduct(SaOrder saOrder, SaOrder updateOrder, Long userId, Object obj);

    /**
     * 订单退单注册会员
     *
     * @param pkMemberList 会员ID列表
     * @param userId       操作用户ID
     */
    R orderReturnMember(List<Long> pkMemberList, Long userId);

    /**
     * 扣款并插入明细
     *
     * @param saOrder         订单
     * @param cuMemberAccount 会员账户
     */
    R insertMemberTrade(SaOrder saOrder, CuMemberAccountExt cuMemberAccount);

    /**
     * 处理订单赠送政策币
     *
     * @param saOrderExt     订单信息
     * @param policyCurrency 赠送政策币（美元）
     * @return
     */
    R handleOrderPolicyActivity(SaOrderExt saOrderExt, BigDecimal policyCurrency);

    /**
     * 回退订单赠送政策币
     *
     * @param saOrderExt    订单信息
     * @param cuMemberTrade 赠送流水
     * @return
     */
    R backOrderPolicyActivity(SaOrderExt saOrderExt, CuMemberTrade cuMemberTrade);

}
