package emu.grasscutter.game.props;

import java.util.stream.Stream;

import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;

public enum ItemUseOp {
    ITEM_USE_NONE (0),
    ITEM_USE_ACCEPT_QUEST (1),
    ITEM_USE_TRIGGER_ABILITY (2),
    ITEM_USE_GAIN_AVATAR (3),
    ITEM_USE_ADD_EXP (4),
    ITEM_USE_RELIVE_AVATAR (5),
    ITEM_USE_ADD_BIG_TALENT_POINT (6),
    ITEM_USE_ADD_PERSIST_STAMINA (7),
    ITEM_USE_ADD_TEMPORARY_STAMINA (8),
    ITEM_USE_ADD_CUR_STAMINA (9),
    ITEM_USE_ADD_CUR_HP (10),
    ITEM_USE_ADD_ELEM_ENERGY (11),
    ITEM_USE_ADD_ALL_ENERGY (12),
    ITEM_USE_ADD_DUNGEON_COND_TIME (13),
    ITEM_USE_ADD_WEAPON_EXP (14),
    ITEM_USE_ADD_SERVER_BUFF (15),
    ITEM_USE_DEL_SERVER_BUFF (16),
    ITEM_USE_UNLOCK_COOK_RECIPE (17),
    ITEM_USE_OPEN_RANDOM_CHEST (20),
    ITEM_USE_MAKE_GADGET (24),
    ITEM_USE_ADD_ITEM (25),
    ITEM_USE_GRANT_SELECT_REWARD (26),
    ITEM_USE_ADD_SELECT_ITEM (27),
    ITEM_USE_GAIN_FLYCLOAK (28),
    ITEM_USE_GAIN_NAME_CARD (29),
    ITEM_USE_UNLOCK_PAID_BATTLE_PASS_NORMAL (30),
    ITEM_USE_GAIN_CARD_PRODUCT (31),
    ITEM_USE_UNLOCK_FORGE (32),
    ITEM_USE_UNLOCK_COMBINE (33),
    ITEM_USE_UNLOCK_CODEX (34),
    ITEM_USE_CHEST_SELECT_ITEM (35),
    ITEM_USE_GAIN_RESIN_CARD_PRODUCT (36),
    ITEM_USE_ADD_RELIQUARY_EXP (37),
    ITEM_USE_UNLOCK_FURNITURE_FORMULA (38),
    ITEM_USE_UNLOCK_FURNITURE_SUITE (39),
    ITEM_USE_ADD_CHANNELLER_SLAB_BUFF (40),
    ITEM_USE_GAIN_COSTUME (41),
    ITEM_USE_ADD_TREASURE_MAP_BONUS_REGION_FRAGMENT (42),
    ITEM_USE_COMBINE_ITEM (43),
    ITEM_USE_UNLOCK_HOME_MODULE (44),
    ITEM_USE_UNLOCK_HOME_BGM (45),
    ITEM_USE_ADD_REGIONAL_PLAY_VAR (46);

    private final int value;
    private static final Int2ObjectMap<ItemUseOp> map = new Int2ObjectOpenHashMap<>();

    static {
        Stream.of(values()).forEach(e -> {
            map.put(e.getValue(), e);
        });
    }

    private ItemUseOp(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public static ItemUseOp getTypeByValue(int value) {
        return map.getOrDefault(value, ITEM_USE_NONE);
    }
}
