#pragma once

#include <vector>

#include "tag-version.h"

using std::vector;

enum potion_type
{
    POT_CURING,
    POT_HEAL_WOUNDS,
    POT_HASTE,
    POT_MIGHT,
    POT_BRILLIANCE,
    POT_ATTRACTION,
#if TAG_MAJOR_VERSION == 34
    POT_GAIN_STRENGTH,
    POT_GAIN_DEXTERITY,
    POT_GAIN_INTELLIGENCE,
#endif
    POT_ENLIGHTENMENT,
#if TAG_MAJOR_VERSION == 34
    POT_POISON,
    POT_SLOWING,
#endif
    POT_CANCELLATION,
    POT_AMBROSIA,
    POT_INVISIBILITY,
#if TAG_MAJOR_VERSION == 34
    POT_PORRIDGE,
#endif
    POT_MOONSHINE,
#if TAG_MAJOR_VERSION == 34
    POT_DECAY,
    POT_WATER,
#endif
    POT_EXPERIENCE,
    POT_MAGIC,
#if TAG_MAJOR_VERSION == 34
    POT_RESTORE_ABILITIES,
    POT_STRONG_POISON,
#endif
    POT_BERSERK_RAGE,
#if TAG_MAJOR_VERSION == 34
    POT_CURE_MUTATION,
#endif
    POT_MUTATION,
    POT_RESISTANCE,
#if TAG_MAJOR_VERSION == 34
    POT_BLOOD,
    POT_BLOOD_COAGULATED,
#endif
    POT_LIGNIFY,
#if TAG_MAJOR_VERSION == 34
    POT_BENEFICIAL_MUTATION,
    POT_DUMMY_AGILITY,
#endif
    NUM_POTIONS
};

// used for objstat
const vector<potion_type> potion_types =
{
    POT_CURING,
    POT_HEAL_WOUNDS,
    POT_HASTE,
    POT_MIGHT,
    POT_BRILLIANCE,
    POT_ATTRACTION,
    POT_ENLIGHTENMENT,
    POT_CANCELLATION,
    POT_AMBROSIA,
    POT_INVISIBILITY,
    POT_MOONSHINE,
    POT_EXPERIENCE,
    POT_MAGIC,
    POT_BERSERK_RAGE,
    POT_MUTATION,
    POT_RESISTANCE,
    POT_LIGNIFY,
};

#if TAG_MAJOR_VERSION == 34
#define CASE_REMOVED_POTIONS(pot) \
case POT_GAIN_STRENGTH: \
case POT_GAIN_DEXTERITY: \
case POT_GAIN_INTELLIGENCE: \
case POT_POISON: \
case POT_SLOWING: \
case POT_PORRIDGE: \
case POT_DECAY: \
case POT_WATER: \
case POT_RESTORE_ABILITIES: \
case POT_STRONG_POISON: \
case POT_CURE_MUTATION: \
case POT_BLOOD: \
case POT_BLOOD_COAGULATED: \
case POT_BENEFICIAL_MUTATION: \
case POT_DUMMY_AGILITY: \
{ \
    die("Removed potion type %d!", static_cast<int>(pot)); \
}
#else
#define CASE_REMOVED_POTIONS(pot)
#endif
