package cokr.xit.ens.modules.common.ctgy.intgrnbill.kko.service.process.model;

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.gson.annotations.SerializedName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.Map;

@Getter
@ToString
@EqualsAndHashCode
@Schema(name = "KkoPayResultReqData")
public class KkoPayResultReqData {

    @Length(max = 50, message = "사용자 식별키의 최대 길이를 초과 했습니다.")
    @NotBlank( message = "사용자 식별키는 필수 조건 입니다.")
    @Schema(required = true, title = "사용자 식별키", example = " ")
    @JsonProperty("biller_user_key")  
    @JsonAlias({"billerUserKey"})
    @SerializedName(value = "biller_user_key", alternate = {"billerUserKey"})
    private String billerUserKey;
    @Length(max = 6, message = "청구연월의 최대 길이를 초과 했습니다.")
    @Schema(required = false, title = "청구연월(YYYYMM 형식), 없을 시 생략", example = " ")
    @JsonProperty("billed_year_month")  
    @JsonAlias({"billedYearMonth"})
    @SerializedName(value = "billed_year_month", alternate = {"billedYearMonth"})
    private String billedYearMonth;
    @Length(max = 24, message = "동일 고객번호의 최대 길이를 초과 했습니다.")
    @Schema(required = false, title = "동일 고객번호, 청구 연월의 복수 개 청구서 발생 등 몇 번째 청구인지 구분을 위해 사용", example = " ")
    private String ordinal;
    @Length(max = 80, message = "개별 청구서 식별키의 최대 길이를 초과 했습니다.")
    @Schema(required = false, title = "개별 청구서를 식별하는 키 값", example = " ")
    @JsonProperty("biller_notice_key")  
    @JsonAlias({"billerNoticeKey"})
    @SerializedName(value = "biller_notice_key", alternate = {"billerNoticeKey"})
    private String billerNoticeKey;
    @Schema(required = false, title = "URL 생성 시 전달한 파라미터", example = " ")
    private Map<String, Object> parameters;
    @NotBlank(message = "결제수단은 필수 조건 입니다.")
    @Schema(required = true, title = "결제수단(CARD/MONEY/MONEY_TRANSFER)", example = " ")
    @JsonProperty("pay_by")  
    @JsonAlias({"payBy"})
    @SerializedName(value = "pay_by", alternate = {"payBy"})
    private String payBy;
    @NotBlank(message = "결제타입은 필수 조건 입니다.")
    @Length(max = 1, message = "결제타입의 최대길이를 초과 했습니다.")
    @Pattern(regexp = "(P|C)", message = "결제타입의 값은 P 또는 C 만 입력 하실 수 있습니다.")
    @Schema(required = true, title = "결제타입(P:결제, C:취소)", example = " ")
    @JsonProperty("pay_type")  
    @JsonAlias({"payType"})
    @SerializedName(value = "pay_type", alternate = {"payType"})
    private String payType;
    @Length(max = 6, message = "결제수단 상세1의 최대길이를 초과 했습니다.")
    @Schema(required = false, title = "결제수단 상세1(카드번호 앞 6자리). 카드인 경우 카드번호 앞 6자리", example = " ")
    @JsonProperty("pay_detail1")  
    @JsonAlias({"payDetail1"})
    @SerializedName(value = "pay_detail1", alternate = {"payDetail1"})
    private String payDetail1;
    @Length(max = 20, message = "결제수단 상세2(카드사 구분 코드)의 최대길이를 초과 했습니다.")
    @Schema(required = false, title = "결제수단 상세2. 카드사 구분 코드", example = " ")
    @JsonProperty("pay_detail2")  
    @JsonAlias({"payDetail2"})
    @SerializedName(value = "pay_detail2", alternate = {"payDetail2"})
    private String payDetail2;
    @Schema(required = false, title = "결제수단 상세3. 공백", example = " ")
    @JsonProperty("pay_detail3")  
    @JsonAlias({"payDetail3"})
    @SerializedName(value = "pay_detail3", alternate = {"payDetail3"})
    private String payDetail3;
    @NotNull(message = "납부요청 금액은 필수 조건 입니다.")
    @Schema(required = true, title = "납부요청 금액", example = " ")
    private Integer amount;
    @NotNull(message = "결제금액/취소금액은 필수 조건 입니다.")
    @Schema(required = true, title = "거래구분이 P 인 경우 양수(결제금액), C 인 경우 음수(-취소금액)", example = " ")
    @JsonProperty("pay_amount")  
    @JsonAlias({"payAmount"})
    @SerializedName(value = "pay_amount", alternate = {"payAmount"})
    private Integer payAmount;
    @Length(max = 10, message = "결제 수수료 부과구분은 필수 조건 입니다.")
    @Schema(required = true, title = "결제 수수료 금액 부과구분(BEFORE: 선취, AFTER: 후취, NONE: 부과 안함)", example = " ")
    @JsonProperty("pay_fee_type")  
    @JsonAlias({"payFeeType"})
    @SerializedName(value = "pay_fee_type", alternate = {"payFeeType"})
    private String payFeeType;
    @NotNull(message = "결제 수수료 공급가액은 필수 조건 입니다.")
    @Schema(required = true, title = "결제 수수료 금액_공급가액", example = " ")
    @JsonProperty("pay_fee")  
    @JsonAlias({"payFee"})
    @SerializedName(value = "pay_fee", alternate = {"payFee"})
    private Integer payFee;
    @NotNull(message = "결제 수수료 부가세는 필수 조건 입니다.")
    @Schema(required = true, title = "결제 수수료 금액_부가세", example = " ")
    @JsonProperty("pay_fee_tax")  
    @JsonAlias({"payFeeTax"})
    @SerializedName(value = "pay_fee_tax", alternate = {"payFeeTax"})
    private Integer payFeeTax;
    @Length(max = 8, message = "정산예정일의 최대 길이를 초과 했습니다.")
    @Schema(required = false, title = "정산예정일(YYYYMMDD)", example = " ")
    @JsonProperty("adjust_date")  
    @JsonAlias({"adjustDate"})
    @SerializedName(value = "adjust_date", alternate = {"adjustDate"})
    private String adjustDate;
    @NotBlank(message = "결제일시는 필수 조건 입니다.")
    @Length(max = 8, message = "결제일시의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "결제일시(YYYYMMDDHH24MISS)", example = " ")
    @JsonProperty("paid_at")  
    @JsonAlias({"paidAt"})
    @SerializedName(value = "paid_at", alternate = {"paidAt"})
    private String paidAt;
    @NotNull(message = "카카오페이 결제번호는 필수 조건 입니다.")
    @Schema(required = true, title = "카카오페이 결제번호", example = " ")
    @JsonProperty("pay_id")  
    @JsonAlias({"payId"})
    @SerializedName(value = "pay_id", alternate = {"payId"})
    private Integer payId;
}
