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

import cokr.xit.ens.modules.common.ctgy.intgrnbill.nv.service.process.code.NvEpCtgyTypeCd;
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.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * 네이버페이 결제정보 응답데이터
 */
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@ToString
@JsonInclude(JsonInclude.Include.NON_NULL)  //2023.03.14 네이버페이 검수 결과 - 요청대상이 아닌 null 값 제외
public class ProductItem {
    @NotNull(message = "결제상품 유형은 필수조건 입니다.")
//    @Length(max = 10, message = "결제상품 유형의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "결제상품 유형", example = " ")
    @JsonProperty("categoryType")
    @JsonAlias({"category_type"})
    @SerializedName(value = "categoryType", alternate = "category_type")
    private NvEpCtgyTypeCd categoryType;
    @NotBlank(message = "결제상품 분류는 필수조건 입니다.")
    @Length(max = 16, message = "결제상품 분류의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "결제상품 분류", example = " ")
    @JsonProperty("categoryId")
    @JsonAlias({"category_id"})
    @SerializedName(value = "categoryId", alternate = "category_id")
    private String categoryId;
    @NotBlank(message = "결제상품 식별값은 필수조건 입니다.")
    @Length(max = 100, message = "결제상품 식별값의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "결제상품 식별값", example = " ")
    private String uid;
    @NotBlank(message = "상품명은 필수조건 입니다.")
    @Length(max = 128, message = "상품명의 최대 길이를 초과 했습니다.")
    @Schema(required = true, title = "상품명", example = " ")
    private String name;
    @Length(max = 20, message = "결제상품유형의 최대 길이를 초과 했습니다.")
    @Schema(required = false, title = "결제상품유형", example = " ")
    @JsonProperty("payReferrer")
    @JsonAlias({"pay_referrer"})
    @SerializedName(value = "payReferrer", alternate = "pay_referrer")
    private String payReferrer;
    @Length(max = 8, message = "시작일의 최대 길이를 초과 했습니다.")
    @Schema(required = false, title = "시작일(yyyyMMdd)", example = "20160701")
    @JsonProperty("startDate")
    @JsonAlias({"start_date"})
    @SerializedName(value = "startDate", alternate = "start_date")
    private String startDate;
    @Length(max = 8, message = "종료일의 최대 길이를 초과 했습니다.")
    @Schema(required = false, title = "종료일(yyyMMdd)", example = "20160701")
    @JsonProperty("endDate")
    @JsonAlias({"end_date"})
    @SerializedName(value = "endDate", alternate = "end_date")
    private String endDate;
    @Length(max = 30, message = "하위판매자식별키의 최대 길이를 초과 했습니다.")
    @Schema(required = false, title = "하위판매자식별키", example = " ")
    @JsonProperty("sellerId")
    @JsonAlias({"seller_id"})
    @SerializedName(value = "sellerId", alternate = "seller_id")
    private String sellerId;
    @NotNull(message = "결제 상품 개수는 필수조건 입니다.")
    @Schema(required = true, title = "결제 상품 개수", example = "1")
    private Integer count;
}
