#include "hench_i0_heal"

void main()
{
    SetCommandable(TRUE);
    int bPolymorphed = GetHasEffect(EFFECT_TYPE_POLYMORPH);
    InitializeItemSpells(HenchDetermineClassToUse(), bPolymorphed, HENCH_INIT_ALL_SPELLS);

    // check if run from master shout
    if (GetLocalInt(OBJECT_SELF, henchHealCountStr) == -1)
    {
        DeleteLocalInt(OBJECT_SELF, henchHealCountStr);
        if(HenchTalentCureCondition(GetMaster()))
        {
            DelayCommand(2.0, VoiceCanDo());
            return;
        }
        if(HenchTalentHeal(GetMaster(), bPolymorphed ? HENCH_HAS_POLYMORPH_EFFECT : 0, HENCH_HEAL_FORCE | HENCH_HEAL_NO_POTIONS))
        {
            DelayCommand(2.0, VoiceCanDo());
            return;
        }
        DelayCommand(2.5, VoiceCannotDo());
        return;
    }

    object oHealTarget = GetLocalObject(OBJECT_SELF, "Henchman_Spell_Target");
    int curHealCount = GetLocalInt(OBJECT_SELF, henchHealCountStr);

    if (!GetIsObjectValid(oHealTarget))
    {
        InitializeAllyTargets(FALSE);
        if (curHealCount == 0)
        {
            ReportUnseenAllies();
        }
    }
    else if (!GetObjectSeen(oHealTarget))
    {
        SpeakString(sHenchCantSeeTarget + GetName(oHealTarget));
        DeleteLocalInt(OBJECT_SELF, henchHealCountStr);
        SetLocalObject(OBJECT_SELF, "Henchman_Spell_Target", OBJECT_INVALID);
        return;
    }
    if(HenchTalentCureCondition(oHealTarget))
    {
        SetLocalInt(OBJECT_SELF, henchHealCountStr, curHealCount + 1);
        return;
    }

    if (GetIsObjectValid(oHealTarget))
    {
        if(HenchTalentHeal(oHealTarget, bPolymorphed ? HENCH_HAS_POLYMORPH_EFFECT : 0, HENCH_HEAL_FORCE | HENCH_HEAL_NO_POTIONS))
        {
            SetLocalInt(OBJECT_SELF, henchHealCountStr, curHealCount + 1);
            return;
        }
    }
    else
    {
        if (HenchTalentHealAll(bPolymorphed ? HENCH_HAS_POLYMORPH_EFFECT : 0, HENCH_HEAL_FORCE | HENCH_HEAL_NO_POTIONS))
        {
            SetLocalInt(OBJECT_SELF, henchHealCountStr, curHealCount + 1);
            return;
        }
    }
    if (curHealCount == 0)
    {
            // didn't find any heal spells
        PlayVoiceChat(VOICE_CHAT_CUSS);
    }
    else
    {
        PlayVoiceChat(VOICE_CHAT_TASKCOMPLETE);
    }
    DeleteLocalInt(OBJECT_SELF, henchHealCountStr);
    SetLocalObject(OBJECT_SELF, "Henchman_Spell_Target", OBJECT_INVALID);
}