package com.style24.persistence.domain;

import java.util.Collection;

import com.style24.persistence.TscBaseDomain;

import lombok.Data;

/**
 * 카카오페이 도메인
 * 
 * @author card007
 * @since 2021. 03. 05
 */
@SuppressWarnings("serial")
@Data
public class KakaoPay extends TscBaseDomain {

	private String aid;													// 요청 고유 번호
	private String tid;													// 결제 고유 번호, 20자
	private String cid;													// 가맹점 코드, 10자
	private String cid_secret;											// 가맹점 코드 인증키, 24자, 숫자+영문 소문자 조합
	private String sid;													// 정기결제용 ID, 정기결제 CID로 단건결제 요청 시 발급
	private String status;												// 결제 상태
	private String partner_order_id;									// 가맹점 주문번호, 최대 100자
	private String partner_user_id;										// 가맹점 회원 id, 최대 100자
	private String payment_method_type;									// 결제 수단, CARD 또는 MONEY 중 하나
	private String item_name;											// 상품명, 최대 100자
	private String item_code;											// 상품코드, 최대 100자
	private int quantity;												// 상품 수량
	private Amount amount;												// 결제 금액 정보
	private CanceledAmount canceled_amount;								// 취소된 금액
	private CancelAvailableAmount cancel_available_amount;				// 취소 가능 금액
	private String created_at;											// 결제 준비 요청 시간
	private String approved_at;											// 결제 승인 시각
	private SelectedCardInfo selected_card_info;						// 결제 카드 정보
	private Collection<PaymentActionDetails> payment_action_details;	// 결제/취소 상세
	private ApprovedCancelAmount approved_cancel_amount;				// 취소요청으로 취소된 금액
	private String next_redirect_app_url;								// 카카오톡 결제 페이지 Redirect URL (모바일 앱)
	private String next_redirect_mobile_url;							// 카카오톡 결제 페이지 Redirect URL (모바일 웹)
	private String next_redirect_pc_url;								// 카카오톡 결제 페이지 Redirect URL (PC 웹)
	private String android_app_scheme;									// 카카오페이 결제 화면으로 이동하는 Android 앱 스킴(Scheme)
	private String ios_app_scheme;										// 카카오페이 결제 화면으로 이동하는 iOS 앱 스킴
	private String payload;												// 결제 승인 요청에 대해 저장한 값, 요청 시 전달된 내용
	private int total_amount;											// 상품 총액
	private CardInfo card_info;											// 결제 상세 정보, 결제수단이 카드일 경우만 포함
	private int statusCode;												// 요청상태코드
	private String code;												// 결과코드
	private String msg;													// 결과메세지
	private Extras extras;												// 실패정보

	@Data
	public class Amount {
		private int total;												// 전체 결제 금액
		private int tax_free;											// 비과세 금액
		private int vat;												// 부가세 금액
		private int point;												// 사용한 포인트 금액
		private int discount;											// 할인 금액
	}

	@Data
	public class CanceledAmount {
		private int total;												// 전체 취소 금액
		private int tax_free;											// 취소된 비과세 금액
		private int vat;												// 취소된 부가세 금액
		private int point;												// 취소된 포인트 금액
		private int discount;											// 취소된 할인 금액
	}

	@Data
	public class CancelAvailableAmount {
		private int total;												// 전체 취소 가능 금액
		private int tax_free;											// 취소 가능한 비과세 금액
		private int vat;												// 취소 가능한 부가세 금액
		private int point;												// 취소 가능한 포인트 금액
		private int discount;											// 취소 가능한 할인 금액
	}
	
	@Data
	public class SelectedCardInfo {
		private String card_bin;										// 카드 BIN
		private int install_month;										// 할부 개월 수
		private String card_corp_name;									// 카드사 정보
		private String interest_free_install;							// 무이자할부 여부(Y/N)
	}

	@Data
	public class PaymentActionDetails {
		private String aid;												// Request 고유 번호
		private String payment_action_type;								// 결제 타입 PAYMENT(결제), CANCEL(결제취소), ISSUED_SID(SID 발급) 중 하나
		private String payment_method_type;								// 결제 수단, CARD 또는 MONEY 중 하나
		private int amount;												// 결제/취소 총액
		private int point_amount;										// 결제/취소 포인트 금액
		private int discount_amount;									// 할인 금액
		private String approved_at;										// 거래시간
		private String payLoad;											// Request로 전달한 값
	}
	
	@Data
	public class CardInfo {
		private String purchase_corp;									// 매입 카드사 한글명
		private String purchase_corp_code;								// 매입 카드사 코드
		private String issuer_corp;										// 카드 발급사 한글명
		private String issuer_corp_code;								// 카드 발급사 코드
		private String kakaopay_purchase_corp;							// 카카오페이 매입사명
		private String kakaopay_purchase_corp_code;						// 카카오페이 매입사 코드
		private String kakaopay_issuer_corp;							// 카카오페이 발급사명
		private String kakaopay_issuer_corp_code;						// 카카오페이 발급사 코드
		private String bin;												// 카드 BIN
		private String card_type;										// 카드 타입
		private String install_month;									// 할부 개월 수
		private String approved_id;										// 카드사 승인번호
		private String card_mid;										// 카드사 가맹점 번호
		private String interest_free_install;							// 무이자할부 여부(Y/N)
		private String card_item_code;									// 카드 상품 코드
	}
	
	@Data
	public class Extras {
		private String method_result_code;								// 실패 코드
		private String method_result_message;							// 실패 메세지
	}
	
	@Data
	public class ApprovedCancelAmount {
		private int total;												// 취소요청으로 취소된 전체 금액
		private int tax_free;											// 취소요청으로 취소된 비과세 금액
		private int vat;												// 취소요청으로 취소된 부가세 금액
		private int point;												// 취소요청으로 취소된 포인트 금액
		private int discount;											// 취소요청으로 취소된 할인 금액
	}
}
