package com.neusoft.smart.pos.payment.repository;

import com.neusoft.smart.pos.dto.payment.request.PostInitFacePayRequest;
import com.neusoft.smart.pos.payment.persistent.ext.domain.*;
import com.neusoft.smart.pos.payorder.persistent.domain.MchPayChannel;
import com.neusoft.smart.pos.payorder.persistent.domain.PayOrder;
import com.neusoft.smart.pos.payorder.persistent.domain.PayTypeDict;

/**
 * @author zcf
 * @date 2018-01-09 10：43
 * @description 第三方支付实现类使用接口
 */
public interface IThirdPayRepository {


	/**
	 * 创建支付单使用方法
	 * @return
	 */
	String createPayOrderToThirdPlatform(PayOrder payOrder, MchPayChannel mchPayChannel, PayTypeDict payTypeDict);

	/**
	 * 预付单信息查询使用方法
	 * @return
	 */
	ThirdPlatformQueryOrder queryPayOrderFromThirdPlatform(PayOrder payOrder, MchPayChannel mchPayChannel);

	 /**
	 * 预付单取消使用方法
	 * @return
	 */
	ThirdPlatformCancelOrder cannelPayOrderFromThirdPlatform(PayOrder payOrder, MchPayChannel mchPayChannel);

	/**
	 * 预付单取消使用方法
	 * @return
	 */
	ThirdPlatformRefundOrder refundPayOrderFromThirdPlatform(PayOrder payOrder, String refundNumber, Long refundAmount, MchPayChannel mchPayChannel, PayTypeDict payTypeDict);

	/**
	 * 预付单撤销使用方法
	 * @return
	 */
	ThirdPlatformReverseOrder reversePayOrderFromThirdPlatform(PayOrder payOrder, String orderNumber, MchPayChannel mchPayChannel);

	/**
	 * 人脸支付初始化使用方法
	 * @return
	 */
	ThirdPlatformInitFacePay initFacePay(PostInitFacePayRequest initFacePayRequest, MchPayChannel mchPayChannel, PayTypeDict payTypeDict);

	/**
	 * 刷脸生活初始化使用方法
	 * @return
	 */
	ThirdPlatformInitFacePay initFaceLive(PostInitFacePayRequest initFacePayRequest, MchPayChannel mchPayChannel, PayTypeDict payTypeDict);

	boolean IsSupportPartialRefund();
}
