#include "potions.h"

#include "constants.h"
#include "restore_health.h"
#include "boost_atk.h"
#include "boost_def.h"
#include "poison_health.h"
#include "wound_atk.h"
#include "wound_def.h"
#include "continuous_restoration.h"
#include "savage_strike.h"
#include "echoing_resilience.h"
#include "tempest_tantrum.h"
#include "berzerk_brew.h"
#include "borrow_life.h"
#include "fine_booze.h"
#include "ironclad_ward.h"

std::unique_ptr<potion> new_potion(potion_type type, const position &pos) {
        switch (type) {
        case RESTORE_HEALTH:
                return std::make_unique<restore_health>(pos);

        case BOOST_ATK:
                return std::make_unique<boost_atk>(pos);

        case BOOST_DEF:
                return std::make_unique<boost_def>(pos);

        case POISON_HEALTH:
                return std::make_unique<poison_health>(pos);

        case WOUND_ATK:
                return std::make_unique<wound_atk>(pos);

        case WOUND_DEF:
                return std::make_unique<wound_def>(pos);

        case CONTINUOUS_RESTORATION:
                return std::make_unique<continuous_restoration>(pos);

        case SAVAGE_STRIKE:
                return std::make_unique<savage_strike>(pos);

        case ECHOING_RESIL:
                return std::make_unique<echoing_resilience>(pos);

        case TEMPEST_TANTRUM:
                return std::make_unique<tempest_tantrum>(pos);

        case BERZERK_BREW:
                return std::make_unique<berzerk_brew>(pos);

        case BORROW_LIFE:
                return std::make_unique<borrow_life>(pos);

        case FINE_BOOZE:
                return std::make_unique<fine_booze>(pos);

        case IRONCLAD_WARD:
                return std::make_unique<ironclad_ward>(pos);

        default:
                break;
        }

        return nullptr;
}
