/*
 * Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
 */

#ifndef _PLAYERBOT_HUNTERTRIGGERS_H
#define _PLAYERBOT_HUNTERTRIGGERS_H

#include "GenericTriggers.h"
#include "Trigger.h"
#include "CureTriggers.h"

class PlayerbotAI;

class HunterNoStingsActiveTrigger : public DebuffTrigger
{
    public:
        HunterNoStingsActiveTrigger(PlayerbotAI* botAI): DebuffTrigger(botAI, "no stings") {}
        bool IsActive() override;
};

class AutoShotTrigger : public Trigger
{
    public:
        AutoShotTrigger(PlayerbotAI* botAI) : Trigger(botAI, "auto shot") { }

        bool IsActive() override;
};

class HunterAspectOfTheMonkeyTrigger : public BuffTrigger
{
    public:
        HunterAspectOfTheMonkeyTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "aspect of the monkey") { }
};

class HunterAspectOfTheHawkTrigger : public BuffTrigger
{
    public:
        HunterAspectOfTheHawkTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "aspect of the hawk") { }
        bool IsActive() override;
};

class HunterAspectOfTheWildTrigger : public BuffTrigger
{
	public:
		HunterAspectOfTheWildTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "aspect of the wild") { }
};

class HunterAspectOfTheViperTrigger : public BuffTrigger
{
    public:
        HunterAspectOfTheViperTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "aspect of the viper") { }

        bool IsActive() override;
};

class HunterAspectOfThePackTrigger : public BuffTrigger
{
    public:
        HunterAspectOfThePackTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "aspect of the pack") { }

        bool IsActive() override;
};

BEGIN_TRIGGER(HuntersPetDeadTrigger, Trigger)
END_TRIGGER()

BEGIN_TRIGGER(HuntersPetLowHealthTrigger, Trigger)
END_TRIGGER()

class BlackArrowTrigger : public DebuffTrigger
{
    public:
        BlackArrowTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "black arrow", 1, true) { }
};

class HuntersMarkTrigger : public DebuffTrigger
{
    public:
        HuntersMarkTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "hunter's mark", 1, false, 25.0f) { }
};

class FreezingTrapTrigger : public HasCcTargetTrigger
{
    public:
        FreezingTrapTrigger(PlayerbotAI* botAI) : HasCcTargetTrigger(botAI, "freezing trap") { }
};

class RapidFireTrigger : public BuffTrigger
{
    public:
        RapidFireTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "rapid fire") { }
};

class TrueshotAuraTrigger : public BuffTrigger
{
    public:
        TrueshotAuraTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "trueshot aura") { }
};

class SerpentStingOnAttackerTrigger : public DebuffOnAttackerTrigger
{
    public:
        SerpentStingOnAttackerTrigger(PlayerbotAI* botAI) : DebuffOnAttackerTrigger(botAI, "serpent sting", true) { }
};

BEGIN_TRIGGER(HunterPetNotHappy, Trigger)
END_TRIGGER()

class ConsussiveShotSnareTrigger : public SnareTargetTrigger
{
    public:
        ConsussiveShotSnareTrigger(PlayerbotAI* botAI) : SnareTargetTrigger(botAI, "concussive shot") { }
};

class ScareBeastTrigger : public HasCcTargetTrigger
{
    public:
        ScareBeastTrigger(PlayerbotAI* botAI) : HasCcTargetTrigger(botAI, "scare beast") { }
};

class HunterLowAmmoTrigger : public AmmoCountTrigger
{
    public:
        HunterLowAmmoTrigger(PlayerbotAI* botAI) : AmmoCountTrigger(botAI, "ammo", 1, 30) { }

        bool IsActive() override;
};

class HunterNoAmmoTrigger : public AmmoCountTrigger
{
    public:
        HunterNoAmmoTrigger(PlayerbotAI* botAI) : AmmoCountTrigger(botAI, "ammo", 1, 10) { }
};

class HunterHasAmmoTrigger : public AmmoCountTrigger
{
    public:
        HunterHasAmmoTrigger(PlayerbotAI* botAI) : AmmoCountTrigger(botAI, "ammo", 1, 10) { }

        bool IsActive() override;
};

class SwitchToRangedTrigger : public Trigger
{
    public:
        SwitchToRangedTrigger(PlayerbotAI* botAI) : Trigger(botAI, "switch to ranged") { }

        bool IsActive() override;
};

class SwitchToMeleeTrigger : public Trigger
{
    public:
        SwitchToMeleeTrigger(PlayerbotAI* botAI) : Trigger(botAI, "switch to melee") { }

        bool IsActive() override;
};

class MisdirectionOnMainTankTrigger : public BuffOnMainTankTrigger
{
    public:
        MisdirectionOnMainTankTrigger(PlayerbotAI* ai) : BuffOnMainTankTrigger(ai, "misdirection", true) {}
};

class TargetRemoveEnrageTrigger : public TargetAuraDispelTrigger
{
    public:
        TargetRemoveEnrageTrigger(PlayerbotAI* ai) : TargetAuraDispelTrigger(ai, "tranquilizing shot", DISPEL_ENRAGE) {}
        bool IsActive() override;
};
#endif
