#ifndef BATTLE_H
#define BATTLE_H
#include "effect.h"
#include "pixelGameEngine.h"
using namespace olc;

enum class BattleMoveName{
    TESTMOVE1,
    TESTMOVE2,
    TESTMOVE3,
	BASH,
	BASH_CHANGE,
	DEFEND,
	EQUIP_ARMOR,
	CONSUMABLE,
	CONSUMABLE_ENEMY,
	HAILSTORM_A,
	HAILSTORM_B,
	HAILSTORM_G,
	HAILSTORM_O,
	HURRICANE_A,
	HURRICANE_B,
	HURRICANE_G,
	HURRICANE_O,
	METEORRAIN_A,
	METEORRAIN_B,
	METEORRAIN_G,
	METEORRAIN_O,
	PKFREEZE_A,
	PKFREEZE_B,
	PKFREEZE_G,
	PKFREEZE_O,
	PKSHIELD_A,
	PKSHIELD_B,
	PKSHIELD_O,
	PKSHIELD_S,
	PKLIFEUP_A,
	PKLIFEUP_B,
	PKLIFEUP_G,
	PKLIFEUP_O,
	PKFUN_A,
	PKFUN_B,
	PKFUN_G,
	PKFUN_O,
	PKFIRE_A,
	PKFIRE_B,
	PKFIRE_G,
	PKFIRE_O,
	FREEZE_PACKET,
};

enum class Resistance{
	WET,
	DRY,
	COLD,
	HEAT,
};

namespace Battle{
	struct Move{
		BattleMoveName id;
		std::string name="";
		std::string desc="";
		char grade=0; //If the name of a move name match, then the grade helps sort it into the same category on menus.
		int baseDmg=10; //The base damage of the attack.
		int randomDmg=5; //Additional random roll damage to add onto the base damage.
		int PPCost=0;
		int range=1; //The range of this ability in tiles.
		int channelTime=0; //The amount of frames to channel the spell.
		bool friendly=false; //Target allies instead.
		std::array<int,4>composition={0,0,0,0};
		std::string attackMsg="$USER uses $POWER";
		Effect*eff=nullptr;
		bool pctDamage=false; //Uses % damage for the base damage instead of flat damage.
		std::map<Property,int> properties={}; //The int is used to determine the chance of something occurring.
		//Properties order is WET, DRY, COLD, HEAT
		bool overworld=false; //Whether or not a move can be used on the overworld.
		std::string GetPowerName() {
			if (grade!=0) {
				return name+" "+grade;
			} else {
				return name;
			}
		}
	};
}
#endif