#ifndef COMPONENTS_AUTOCALC_AUTOCALCSPELL_H
#define COMPONENTS_AUTOCALC_AUTOCALCSPELL_H

#include <vector>

#include <components/esm/loadskil.hpp>

namespace ESM
{
    struct Spell;
    struct Race;
}

namespace AutoCalc
{

class StoreCommon;

/// Contains algorithm for calculating an NPC's spells based on stats

std::vector<std::string> autoCalcNpcSpells(const int* actorSkills,
        const int* actorAttributes, const ESM::Race* race, StoreCommon *store);

// Helpers

bool attrSkillCheck (const ESM::Spell* spell,
        const int* actorSkills, const int* actorAttributes, StoreCommon *store);

ESM::Skill::SkillEnum mapSchoolToSkill(int school);

void calcWeakestSchool(const ESM::Spell* spell,
        const int* actorSkills, int& effectiveSchool, float& skillTerm, StoreCommon *store);

float calcAutoCastChance(const ESM::Spell* spell,
        const int* actorSkills, const int* actorAttributes, int effectiveSchool, StoreCommon *store);

}

#endif // COMPONENTS_AUTOCALC_AUTOCALCSPELL_H