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.ext.CuMemberAccountExt;
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 新订单
     * @return
     */
    R<?> orderChangeProductPre(SaOrder saOrder, SaOrder updateOrder);

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

    /**
     * 订单自提退邮费
     *
     * @param pkMember  会员ID
     * @param pkCountry 所属国家
     * @param pkRate    汇率
     * @param postage   邮费
     * @param userId    操作人ID
     * @return
     */
    R<?> orderSelfDeliver(Long pkMember, Integer pkRate, Integer pkCountry, BigDecimal postage, Long userId);

    /**
     * 订单合单退单
     *
     * @param saOrder 退单订单
     * @param userId  操作用户ID
     * @return
     */
    R<?> orderReturnBatch(SaOrder saOrder, Long userId);

}
