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

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;

/**
 * 카카오페이 결제정보 응답데이터
 */
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@ToString
public class KkoPayNoticeRespData {

    @NotBlank(message = "청구서명은 필수 입력값 입니다.")
    @Schema(required = true, title = "청구서명", example = "테스트청구서")
    private String title;
    @NotNull(message = "납부 요청금액은 필수 입력값 입니다.")
    @Schema(required = true, title = "납부 요청금액", example = "1000")
    private Integer amount;
    @Schema(required = false, title = "비과세 금액", example = "0")
    @JsonProperty("tax_free_amount")  
    @JsonAlias({"taxFreeAmount"})
    @SerializedName(value = "tax_free_amount", alternate = {"taxFreeAmount"})
    private Integer taxFreeAmount;
    @Schema(required = false, title = "부가세 금액", example = "0")
    @JsonProperty("vat_amount")  
    @JsonAlias({"vatAmount"})
    @SerializedName(value = "vat_amount", alternate = {"vatAmount"})
    private Integer vatAmount;
    @Schema(required = false, title = "납기 안내타입", example = "D1")
    @JsonProperty("expire_type")  
    @JsonAlias({"expireType"})
    @SerializedName(value = "expire_type", alternate = {"expireType"})
    private String expireType;
    @NotNull(message = "첫번째 납기일은 필수 입력값 입니다.")
    @Length(max = 8, message = "첫번째 납기일의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "첫번째 납기일", example = "20230212")
    @JsonProperty("pay_expire_date")  
    @JsonAlias({"payExpireDate"})
    @SerializedName(value = "pay_expire_date", alternate = {"payExpireDate"})
    private String payExpireDate;
    @Length(max = 8, message = "두번째 납기일의 최대 길이를 초과 했습니다.")
    @Schema(required = false, title = "두번째 납기일", example = "20230212")
    @JsonProperty("second_pay_expire_date")  
    @JsonAlias({"secondPayExpireDate"})
    @SerializedName(value = "second_pay_expire_date", alternate = {"secondPayExpireDate"})
    private String secondPayExpireDate;
    @Valid
    @Schema(required = false, title = "계좌송금수단 사용 시 계좌정보", example = " ")
    @JsonProperty("bank_accounts")  
    @JsonAlias({"bankAccounts"})
    @SerializedName(value = "bank_accounts", alternate = {"bankAccounts"})
    private List<KkoPayBankAccounts> bankAccounts;
    @Schema(required = false, title = "청구서 상세정보", example = " ")
    private List<Map<String, Object>> details;
}
