package cokr.xit.ens.modules.common.ctgy.intgrnbill.nv.api;

import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;

import java.util.ArrayList;
import java.util.Map;

/**
 * 네이버페이 간편결제 API
 */
public interface BillNvEasyPayApiSpec {
    /**
     * 결제 승인
     *
     * @param partnerId    파트너 ID
     * @param clientId     발급된 client id
     * @param clientSecret 발급된 client secret
     * @param param    요청파라미터
     * @return
     */
    ResponseEntity<String> payApply(String partnerId, String clientId, String clientSecret, LinkedMultiValueMap param);

    /**
     * 결제취소
     *
     * @param partnerId    파트너 ID
     * @param clientId     발급된 client id
     * @param clientSecret 발급된 client secret
     * @param param        요청파라미터
     * @return
     */
    ResponseEntity<String> payCancel(String partnerId, String clientId, String clientSecret, LinkedMultiValueMap param);

    /**
     * 결제내역조회
     *
     * @param partnerId    파트너 ID
     * @param clientId     발급된 client id
     * @param clientSecret 발급된 client secret
     * @param param        요청파라미터
     * @return
     */
    ResponseEntity<String> payHist(String partnerId, String clientId, String clientSecret, Map<String, Object> param);


    /**
     * 거래완료
     *
     * @param partnerId    파트너 ID
     * @param clientId     발급된 client id
     * @param clientSecret 발급된 client secret
     * @param paymentId    네이버페이 결제번호
     * @param requester    요청자(1:구매자, 2:가맹점 관리자). 구분이 애매한 경우 가맹점 관리자로 입력합니다.
     * @return
     */
    ResponseEntity<String> purchaseConfirm(String partnerId, String clientId, String clientSecret, String paymentId, String requester);

    /**
     * 포인트 적립 요청
     *
     * @param partnerId    파트너 ID
     * @param clientId     발급된 client id
     * @param clientSecret 발급된 client secret
     * @param paymentId    네이버페이 결제번호
     * @return
     */
    ResponseEntity<String> pointSave(String partnerId, String clientId, String clientSecret, String paymentId);

    /**
     * 현금영수증 발행대상 금액조회
     *
     * @param partnerId    파트너 ID
     * @param clientId     발급된 client id
     * @param clientSecret 발급된 client secret
     * @param paymentIds   네이버페이 결제번호 목록
     * @return
     */
    ResponseEntity<String> cashAmount(String partnerId, String clientId, String clientSecret, ArrayList<String> paymentIds);
}
