#include "prc_alterations"

void main()
{
    int nEvent = GetRunningEvent();
    if(DEBUG) DoDebug("prc_reapmauler running, event: " + IntToString(nEvent));

    // Get the PC. This is event-dependent
    object oPC;
    switch(nEvent)
    {
        case EVENT_ITEM_ONHIT:          oPC = OBJECT_SELF;               break;
        case EVENT_ONPLAYEREQUIPITEM:   oPC = GetItemLastEquippedBy();   break;
        case EVENT_ONPLAYERUNEQUIPITEM: oPC = GetItemLastUnequippedBy(); break;

        default:
            oPC = OBJECT_SELF;
    }
    
    object oItem;
    object oArmour = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
    object oSkin = GetPCSkin(oPC);
    int nArmour = GetBaseAC(oArmour);

    // We aren't being called from any event, instead from EvalPRCFeats
    if(nEvent == FALSE)
    {
        // Hook in the events, needed from level 1 for IP Feats
        if(DEBUG) DoDebug("prc_reapmauler: Adding eventhooks");
        AddEventScript(oPC, EVENT_ONPLAYEREQUIPITEM,   "prc_reapmauler", TRUE, FALSE);
        AddEventScript(oPC, EVENT_ONPLAYERUNEQUIPITEM, "prc_reapmauler", TRUE, FALSE);
        // Clean up
        if (nArmour > 3)
        {        
            RemoveItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_IMPROVED_GRAPPLE));
            RemoveItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_MOBILITY));
            //FloatingTextStringOnCreature("prc_reapmauler: removing feats", oPC, FALSE);
        }   
        // Light armour only
        if (3 >= nArmour)
        {
            IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_FEAT_IMPROVED_GRAPPLE), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
            IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_FEAT_MOBILITY), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
            //FloatingTextStringOnCreature("prc_reapmauler: Adding feats", oPC, FALSE);
        }          
    }
    // We are called from the OnPlayerEquipItem eventhook. Add OnHitCast: Unique Power to oPC's weapon
    else if(nEvent == EVENT_ONPLAYEREQUIPITEM)
    {
        oPC   = GetItemLastEquippedBy();
        oItem = GetItemLastEquipped();
        if(DEBUG) DoDebug("prc_reapmauler - OnEquip\n"
                        + "oPC = " + DebugObject2Str(oPC) + "\n"
                        + "oItem = " + DebugObject2Str(oItem) + "\n"
                          );
                          
        // Light armour only
        if (3 >= nArmour)
        {
            IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_FEAT_IMPROVED_GRAPPLE), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
            IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_FEAT_MOBILITY), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
           //FloatingTextStringOnCreature("prc_reapmauler: Adding feats", oPC, FALSE);
        }                          
    }
    // We are called from the OnPlayerUnEquipItem eventhook. Remove OnHitCast: Unique Power from oPC's weapon
    else if(nEvent == EVENT_ONPLAYERUNEQUIPITEM)
    {
        oPC   = GetItemLastUnequippedBy();
        oItem = GetItemLastUnequipped();
        if(DEBUG) DoDebug("prc_reapmauler - OnUnEquip\n"
                        + "oPC = " + DebugObject2Str(oPC) + "\n"
                        + "oItem = " + DebugObject2Str(oItem) + "\n"
                          );
        // Clean up
        if (nArmour > 3)
        {        
            RemoveItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_IMPROVED_GRAPPLE));
            RemoveItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_MOBILITY));
            //FloatingTextStringOnCreature("prc_reapmauler: removing feats", oPC, FALSE);
        }    
    }
}