package emu.nebula.game.achievement;

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

public enum AchievementCondition {
    AchievementSpecific                                          (1),
    AchievementTotal                                             (2),
    BattleTotal                                                  (3),
    CharacterAcquire                                             (5),
    CharacterAcquireQuantityRarityAndAdvancement                 (6),
    CharacterAdvanceTotal                                        (7),
    CharacterSkillUpTotal                                        (8),
    CharacterSkillWithSpecificUpTotal                            (9),
    CharacterSpecific                                            (10),
    CharacterUpLevel                                             (11),
    CharacterUpTotal                                             (12),
    CharacterWithSpecificAdvance                                 (13),
    CharacterWithSpecificAffinity                                (14),
    CharacterWithSpecificUpLevel                                 (15),
    CharactersWithSpecificLevelAndQuantity                       (16),
    CharactersWithSpecificNumberLevelAndAttributes               (17),
    CharactersWithSpecificPlot                                   (18),
    CharactersWithSpecificQuantityAdvancementCountAndAttribute   (19),
    CharactersWithSpecificQuantityAndRarity                      (20),
    CharactersWithSpecificQuantityRarityAndAdvancement           (21),
    CharactersWithSpecificQuantityRarityAndLevel                 (22),
    ChatTotal                                                    (23),
    DailyInstanceClearSpecificDifficultyAndTotal                 (24),
    DailyInstanceClearSpecificTypeAndTotal                       (25),
    DailyInstanceClearTotal                                      (26),
    DateSpecific                                                 (27),
    DiscAcquire                                                  (28),
    DiscAcquireSpecificQuantityAndRarity                         (29),
    DiscAcquireQuantityLevelAndRarity                            (30),
    DiscAcquireQuantityPhaseAndRarity                            (31),
    DiscAcquireQuantityStarAndRarity                             (32),
    DiscLimitBreakTotal                                          (33),
    DiscPromoteTotal                                             (34),
    DiscStrengthenTotal                                          (35),
    DiscWithSpecificQuantityLevelAndRarity                       (36),
    DiscWithSpecificQuantityPhaseAndRarity                       (37),
    DiscWithSpecificQuantityStarAndRarity                        (38),
    GachaCharacterNotSSRTotal                                    (40),
    GachaCharacterTenModeSSRTotal                                (41),
    GachaCharacterTotal                                          (42),
    GachaTenModeAcquireQuantityAndRarityItems                    (43),
    GachaTotal                                                   (44),
    GiftGiveTotal                                                (45),
    InfinityTowerClearSpecificFloor                              (46),
    InfinityTowerClearTotal                                      (47),
    ItemsAdd                                                     (48),
    ItemsDeplete                                                 (49),
    ItemsProductTotal                                            (50),
    LoginTotal                                                   (51),
    QuestTravelerDuelChallengeTotal                              (52),
    QuestTourGuideSpecific                                       (53),
    QuestTravelerDuelSpecific                                    (54),
    QuestWithSpecificType                                        (55),
    RegionBossClearSpecificFullStarWithBossIdAndDifficulty       (56),
    RegionBossClearSpecificLevelWithDifficultyAndTotal           (57),
    RegionBossClearSpecificTotal                                 (58),
    RegionBossClearTotal                                         (59),
    SkillsWithSpecificQuantityAndLevel                           (60),
    SkinAcquire                                                  (61),
    StageClearSpecificStars                                      (62),
    StoryClear                                                   (63),
    TravelerDuelChallengeSpecificBoosLevelWithDifficultyAndTotal (64),
    TravelerDuelClearBossTotal                                   (65),
    TravelerDuelClearSpecificBossIdAndDifficulty                 (66),
    TravelerDuelChallengeClearSpecificBossLevelAndAffix          (67),
    TravelerDuelClearSpecificBossLevelWithDifficultyAndTotal     (68),
    TravelerDuelClearSpecificBossTotal                           (69),
    TravelerDuelChallengeRankUploadTotal                         (70),
    WorldClassSpecific                                           (71),
    RegionBossClearSpecificTypeWithTotal                         (72),
    CharactersWithSpecificDatingCount                            (73),
    CharactersDatingTotal                                        (74),
    VampireSurvivorScoreTotal                                    (75),
    VampireSurvivorSpecificLevelWithSpecificScore                (76),
    VampireSurvivorPassedSpecificLevel                           (77),
    CharacterParticipateTowerNumber                              (78),
    CharacterAllSkillReachSpecificLevel                          (79),
    TravelerDuelPlayTotal                                        (80),
    VampireClearTotal                                            (81),
    VampireWithSpecificClearTotal                                (82),
    AgentFinishTotal                                             (83),
    AgentWithSpecificFinishTotal                                 (84),
    ActivityMiningEnterLayer                                     (86),
    ActivityMiningDestroyGrid                                    (87),
    BossRushTotalStars                                           (88),
    InfinityTowerClearSpecificDifficultyAndTotal                 (89),
    SkillInstanceClearTotal                                      (90),
    VampireSurvivorSpecificPassedLevel                           (91),
    WeekBoosClearSpecificDifficultyAndTotal                      (92),
    NpcAffinityWithSpecificLevel                                 (93),
    CharacterPassedWithSpecificTowerAndCount                     (94),
    JointDrillScoreTotal                                         (95),
    CharGemInstanceClearTotal                                    (104),
    DailyShopReceiveShopTotal                                    (105),
    AgentApplyTotal                                              (106),
    DiscSpecific                                                 (114),
    ClientReport                                                 (200),
    TowerBattleTimes                                             (501),
    TowerBossChallengeSpecificHighRewardWithTotal                (502),
    TowerBuildSpecificCharacter                                  (503),
    TowerBuildSpecificScoreWithTotal                             (504),
    TowerClearSpecificCharacterTypeWithTotal                     (505),
    TowerClearSpecificGroupIdAndDifficulty                       (506),
    TowerClearSpecificLevelWithDifficultyAndTotal                (507),
    TowerClearTotal                                              (508),
    TowerEnterRoom                                               (509),
    TowerEventTimes                                              (511),
    TowerFateTimes                                               (512),
    TowerItemsGet                                                (513),
    TowerSpecificDifficultyShopBuyTimes                          (514),
    TowerGrowthSpecificNote                                      (515),
    TowerClearSpecificLevelWithDifficultyAndTotalHistory         (516),
    TowerBookWithSpecificEvent                                   (517),
    TowerBookWithSpecificFateCard                                (518),
    TowerBookWithSpecificPotential                               (520),
    TowerBuildSpecificDifficultyAndScoreWithTotal                (521),
    TowerSpecificDifficultyStrengthenMachineTotal                (522),
    TowerSpecificDifficultyKillBossTotal                         (524),
    TowerBookSpecificCharWithPotentialTotal                      (525),
    TowerBuildSpecificCharSpecificScoreWithTotal                 (526),
    TowerGrowthWithSpecificNote                                  (527),
    TowerSpecificFateCardReRollTotal                             (528),
    TowerSpecificPotentialReRollTotal                            (529),
    TowerSpecificShopReRollTotal                                 (530),
    TowerSpecificNoteActivateTotal                               (531),
    TowerSpecificNoteLevelTotal                                  (532),
    TowerSpecificPotentialBonusTotal                             (533),
    TowerSpecificPotentialLuckyTotal                             (534),
    TowerSpecificShopBuyDiscountTotal                            (535),
    TowerSpecificSecondarySkillActivateTotal                     (536),
    TowerSpecificGetExtraNoteLvTotal                             (537),
    TowerSweepTimes                                              (539),
    TowerSweepTotal                                              (540);

    @Getter
    private final int value;
    private final static Int2ObjectMap<AchievementCondition> map = new Int2ObjectOpenHashMap<>();

    static {
        for (AchievementCondition type : AchievementCondition.values()) {
            map.put(type.getValue(), type);
        }
    }

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

    public static AchievementCondition getByValue(int value) {
        return map.get(value);
    }
}
