package cokr.xit.ens.modules.common.ctgy.intgrnbill.nv.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.*;
import org.hibernate.validator.constraints.Length;

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

/**
 * 네이버페이 결제가능여부 요청데이터
 */
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@ToString
public class NvPayAbleReqData {
    @NotEmpty(message = "계약번호는 필수 입력값 입니다.")
    @Length(max = 50, message = "계약번호의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "기관에서 관리하는 해당 고객번호 혹은 계약번호", example = " ")
    @JsonProperty("billerUserKey")  
    @JsonAlias({"biller_user_key"})
    @SerializedName(value = "billerUserKey", alternate = {"biller_user_key"})
    private String billerUserKey;
    @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 = "1000")
    @JsonProperty("totalPayAmount")  
    @JsonAlias({"total_pay_amount"})
    @SerializedName(value = "totalPayAmount", alternate = {"total_pay_amount"})
    private Integer totalPayAmount;
    @NotNull(message = "과세 대상 금액은 필수 입력값 입니다.")
    @Schema(required = true, title = "과세 대상 금액", example = "1000")
    @JsonProperty("taxScopeAmount")  
    @JsonAlias({"tax_scope_amount"})
    @SerializedName(value = "taxScopeAmount", alternate = {"tax_scope_amount"})
    private Integer taxScopeAmount;
    @NotNull(message = "면세 대상 금액은 필수 입력값 입니다.")
    @Schema(required = true, title = "면세 대상 금액", example = "0")
    @JsonProperty("taxExScopeAmount")  
    @JsonAlias({"tax_ex_scope_amount"})
    @SerializedName(value = "taxExScopeAmount", alternate = {"tax_ex_scope_amount"})
    private Integer taxExScopeAmount;
}
