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

import cokr.xit.ens.modules.common.ctgy.intgrnbill.nv.service.process.model.config.notice.ProductItem;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonInclude;
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;

/**
 * 네이버페이 결제정보 응답데이터
 */
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@ToString
@JsonInclude(JsonInclude.Include.NON_NULL)  //2023.03.14 네이버페이 검수 결과 - 요청대상이 아닌 null 값 제외
public class NvPayNoticeRespData {
    @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("productCount")  
    @JsonAlias({"product_count"})
    @SerializedName(value = "productCount", alternate = {"product_count"})
    private Integer productCount;
    @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;
    @Schema(required = false, title = "컵 보증금 대상 금액", example = "0")
    @JsonProperty("environmentDepositAmount")  
    @JsonAlias({"environment_deposit_amount"})
    @SerializedName(value = "environmentDepositAmount", alternate = {"environment_deposit_amount"})
    private Integer environmentDepositAmount;
    @NotNull(message = "상품 목록은 필수조건 입니다.")
    @Schema(required = false, title = "상품 목록", example = " ")
    @JsonProperty("productItems")  
    @JsonAlias({"product_items"})
    @SerializedName(value = "productItems", alternate = {"product_items"})
    @Valid
//    private List<Map<String, Object>> productItems;
    private List<ProductItem> productItems;
    @NotBlank(message = "리턴URL는 필수조건 입니다.")
    @Length(max = 1000, message = "리턴URL의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "네이버페이 결제 후 리턴URL", example = " ")
    @JsonProperty("returnUrl")
    @JsonAlias({"return_url"})
    @SerializedName(value = "returnUrl", alternate = "return_url")
    private String returnUrl;

    @Length(max = 64, message = "구매자 성명의 최대 길이를 초과 했습니다.")
    @Schema(required = false, title = "구매자 성명", example = " ")
    @JsonProperty("purchaserName")
    @JsonAlias({"purchaser_name"})
    @SerializedName(value = "purchaserName", alternate = "purchaser_name")
    private String purchaserName;
    @Length(max = 64, message = "구매자 생년월일의 최대 길이를 초과 했습니다.")
    @Schema(required = false, title = "구매자 생년월일(yyyyMMdd)", example = " ")
    @JsonProperty("purchaserBirthday")
    @JsonAlias({"purchaser_birthday"})
    @SerializedName(value = "purchaserBirthday", alternate = "purchaser_birthday")
    private String purchaserBirthday;
//    @Schema(required = false, title = "도서/공연비 소득공제 대상 여부", example = " ")
//    @JsonProperty("extraDeduction")
//    @JsonAlias({"extra_deduction"})
//    @SerializedName(value = "extraDeduction", alternate = "extra_deduction")
//    private Boolean extraDeduction;
}
