package com.caliverse.admin.domain.entity;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder;
import lombok.Data;

import java.time.LocalDateTime;


@Data
@Builder
public class ItemDict {
    //대분류
    @JsonProperty("type_large")
    private String typeLarge;
    //소분류
    @JsonProperty("type_small")
    private String typeSmall;
    //아이템명
    @JsonProperty("item_name")
    private String itemName;
    //아이템아이디
    @JsonProperty("item_id")
    private Integer itemId;
    //브랜드
    private String brand;
    //성별
    private String gender;
    //판매시 획득 재화
    @JsonProperty("sell_type")
    private String sellType;
    //판매시 획득 재화량
    @JsonProperty("sell_price")
    private Integer sellPrice;
    //구매시 필요 재화
    @JsonProperty("buy_type")
    private String buyType;
    //구매시 필요 재화량
    @JsonProperty("buy_price")
    private Integer buyPrice;
    //구매시 할인율
    @JsonProperty("buy_discount_rate")
    private Integer buyDiscountRate;

    private Country country;
    private Expire expire;
    private Trade trade;
    private Attrib attrib;
    private Etc etc;

    @Builder
    public static class Country{
        //최대 보유 가능 수량
        @JsonProperty("max_count")
        private Integer maxCount;
        //최대 스택 가능 수량
        @JsonProperty("stack_max_count")
        private Integer stackMaxCount;
    }

    @Builder
    public static class Expire{
        //아이템 만료 타입
        @JsonProperty("expire_type")
        private String expireType;
        //만료 시작 시간
        @JsonProperty("expire_start_dt")
        private LocalDateTime expireStartDt;
        //만료 종료 시간
        @JsonProperty("expire_end_dt")
        private LocalDateTime expireEndDt;
        //만료 시간 연장 여부
        @JsonProperty("expire_time_sec")
        private Integer expireTimeSec;
    }

    @Builder
    public static class Trade{
        //유저 간 거래 가능 여부
        @JsonProperty("user_tradable")
        private boolean userTradable;
        //상점에서 판매 가능 여부
        @JsonProperty("system_tradable")
        private boolean systemTradable;
        //버리기 가능 여부
        @JsonProperty("throwable")
        private boolean throwable;
        //상점에서 구매 가능 여부
        @JsonProperty("cart_buy")
        private boolean cartBuy;
    }

    @Builder
    public static class Attrib{
        //희귀도
        @JsonProperty("rarity")
        private String rarity;
        //기본 속성
        @JsonProperty("default_attrib")
        private String defaultAttrib;
        //랜덤 그룹
        @JsonProperty("attrib_random_group")
        private String attribRandomGroup;
        //아이템 세트
        @JsonProperty("item_set")
        private String itemSet;
        //아이템 사용 시 획득 버프
        @JsonProperty("buff")
        private String buff;
    }

    @Builder
    public static class Etc{
        //착용 부위
        @JsonProperty("dress_slot_type")
        private String dressSlotType;
        //제품 URL
        @JsonProperty("product_link")
        private String productLink;
        //제작 아이템 그룹
        @JsonProperty("prop_small_type")
        private String propSmallType;
        //랜덤박스 그룹 ID
        @JsonProperty("gacha_group_id")
        private Integer gachaGroupId;
        //UGQ 사용 가능 여부
        @JsonProperty("ugq_action")
        private String ugqAction;
        //연결된 랜드 ID
        @JsonProperty("linked_land")
        private Integer linkedLand;
    }
}
