package cokr.xit.ens.modules.common.ctgy.intgrnbill.nv.service.process.model.config.able;

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.*;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * 네이버페이 결제승인 응답데이터 상세
 */
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@ToString
public class Detail {
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 50, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("paymentId")
    @JsonAlias({"payment_id"})
    @SerializedName(value = "paymentId", alternate = "payment_id")
    private String paymentId;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 50, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("payHistId")
    @JsonAlias({"pay_hist_id"})
    @SerializedName(value = "payHistId", alternate = "pay_hist_id")
    private String payHistId;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 50, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("merchantId")
    @JsonAlias({"merchant_id"})
    @SerializedName(value = "merchantId", alternate = "merchant_id")
    private String merchantId;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 50, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("merchantName")
    @JsonAlias({"merchant_name"})
    @SerializedName(value = "merchantName", alternate = "merchant_name")
    private String merchantName;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 64, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("merchantPayKey")
    @JsonAlias({"merchant_pay_key"})
    @SerializedName(value = "merchantPayKey", alternate = "merchant_pay_key")
    private String merchantPayKey;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 50, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("merchantUserKey")
    @JsonAlias({"merchant_user_key"})
    @SerializedName(value = "merchantUserKey", alternate = "merchant_user_key")
    private String merchantUserKey;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 2, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("admissionTypeCode")
    @JsonAlias({"admission_type_code"})
    @SerializedName(value = "admissionTypeCode", alternate = "admission_type_code")
    private String admissionTypeCode;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 14, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("admissionYmdt")
    @JsonAlias({"admission_ymdt"})
    @SerializedName(value = "admissionYmdt", alternate = "admission_ymdt")
    private String admissionYmdt;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 50, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("tradeConfirmYmdt")
    @JsonAlias({"trade_confirm_ymdt"})
    @SerializedName(value = "tradeConfirmYmdt", alternate = "trade_confirm_ymdt")
    private String tradeConfirmYmdt;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 10, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("admissionState")
    @JsonAlias({"admission_state"})
    @SerializedName(value = "admissionState", alternate = "admission_state")
    private String admissionState;
    @NotNull(message = "은 필수조건 입니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("totalPayAmount")
    @JsonAlias({"total_pay_amount"})
    @SerializedName(value = "totalPayAmount", alternate = "total_pay_amount")
    private Integer totalPayAmount;
    @NotNull(message = "은 필수조건 입니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("primaryPayAmount")
    @JsonAlias({"primary_pay_amount"})
    @SerializedName(value = "primaryPayAmount", alternate = "primary_pay_amount")
    private Integer primaryPayAmount;
    @NotNull(message = "은 필수조건 입니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("npointPayAmount")
    @JsonAlias({"npoint_pay_amount"})
    @SerializedName(value = "npointPayAmount", alternate = "npoint_pay_amount")
    private Integer npointPayAmount;
    @NotNull(message = "은 필수조건 입니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("giftCardAmount")
    @JsonAlias({"gift_card_amount"})
    @SerializedName(value = "giftCardAmount", alternate = "gift_card_amount")
    private Integer giftCardAmount;
    @NotNull(message = "은 필수조건 입니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("taxScopeAmount")
    @JsonAlias({"tax_scope_amount"})
    @SerializedName(value = "taxScopeAmount", alternate = "tax_scope_amount")
    private Integer taxScopeAmount;
    @NotNull(message = "은 필수조건 입니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("taxExScopeAmount")
    @JsonAlias({"tax_ex_scope_amount"})
    @SerializedName(value = "taxExScopeAmount", alternate = "tax_ex_scope_amount")
    private Integer taxExScopeAmount;
    @NotNull(message = "은 필수조건 입니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("environmentDepositAmount")
    @JsonAlias({"environment_deposit_amount"})
    @SerializedName(value = "environmentDepositAmount", alternate = "environment_deposit_amount")
    private Integer environmentDepositAmount;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 10, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("primaryPayMeans")
    @JsonAlias({"primary_pay_means"})
    @SerializedName(value = "primaryPayMeans", alternate = "primary_pay_means")
    private String primaryPayMeans;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 10, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("cardCorpCode")
    @JsonAlias({"card_corp_code"})
    @SerializedName(value = "cardCorpCode", alternate = "card_corp_code")
    private String cardCorpCode;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 50, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("cardNo")
    @JsonAlias({"card_no"})
    @SerializedName(value = "cardNo", alternate = "card_no")
    private String cardNo;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 30, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("cardAuthNo")
    @JsonAlias({"card_auth_no"})
    @SerializedName(value = "cardAuthNo", alternate = "card_auth_no")
    private String cardAuthNo;
    @NotNull(message = "은 필수조건 입니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("cardInstCount")
    @JsonAlias({"card_inst_count"})
    @SerializedName(value = "cardInstCount", alternate = "card_inst_count")
    private Integer cardInstCount;
    @NotNull(message = "은 필수조건 입니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("usedCardPoint")
    @JsonAlias({"used_card_point"})
    @SerializedName(value = "usedCardPoint", alternate = "used_card_point")
    private Boolean usedCardPoint;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 10, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("bankCorpCode")
    @JsonAlias({"bank_corp_code"})
    @SerializedName(value = "bankCorpCode", alternate = "bank_corp_code")
    private String bankCorpCode;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 50, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("bankAccountNo")
    @JsonAlias({"bank_account_no"})
    @SerializedName(value = "bankAccountNo", alternate = "bank_account_no")
    private String bankAccountNo;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 128, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("productName")
    @JsonAlias({"product_name"})
    @SerializedName(value = "productName", alternate = "product_name")
    private String productName;
    @NotNull(message = "은 필수조건 입니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("settleExpected")
    @JsonAlias({"settle_expected"})
    @SerializedName(value = "settleExpected", alternate = "settle_expected")
    private Boolean settleExpected;
    @NotNull(message = "은 필수조건 입니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("settleExpectAmount")
    @JsonAlias({"settle_expect_amount"})
    @SerializedName(value = "settleExpectAmount", alternate = "settle_expect_amount")
    private Integer settleExpectAmount;
    @NotNull(message = "은 필수조건 입니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("payCommissionAmount")
    @JsonAlias({"pay_commission_amount"})
    @SerializedName(value = "payCommissionAmount", alternate = "pay_commission_amount")
    private Integer payCommissionAmount;
    @NotNull(message = "은 필수조건 입니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("extraDeduction")
    @JsonAlias({"extra_deduction"})
    @SerializedName(value = "extraDeduction", alternate = "extra_deduction")
    private Boolean extraDeduction;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 8, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("useCfmYmdt")
    @JsonAlias({"use_cfm_ymdt"})
    @SerializedName(value = "useCfmYmdt", alternate = "use_cfm_ymdt")
    private String useCfmYmdt;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 4000, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("merchantExtraParameter")
    @JsonAlias({"merchant_extra_parameter"})
    @SerializedName(value = "merchantExtraParameter", alternate = "merchant_extra_parameter")
    private String merchantExtraParameter;
    @NotBlank(message = "은 필수조건 입니다.")
    @Length(max = 44, message = "의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "", example = " ")
    @JsonProperty("userIdentifier")
    @JsonAlias({"user_identifier"})
    @SerializedName(value = "userIdentifier", alternate = "user_identifier")
    private String userIdentifier;
}
