//:://////////////////////////////////////////////
//:: Shining Blade of Heironeous - Class evaluation
//:: prc_sbheir
//:://////////////////////////////////////////////

#include "inc_eventhook"
#include "prc_inc_sbheir"

const int DEBUG_EVENTS = FALSE;

void main()
{
    int nEvent = GetRunningEvent();
    if(nEvent == FALSE) //We aren't being called from any event, instead from EvalPRCFeats
    {
        object oPC = OBJECT_SELF;

        AddEventScript(oPC, EVENT_ONHIT, "prc_sbheir", TRUE, FALSE);
        
        if(GetLocalInt(oPC,"ONEQUIP")) //2 = equip, 1 = unequip
        {
            if (DEBUG_EVENTS) DoDebug("$$$  prc_sbheir: ONEQUIP/ONUNEQUIP");
            
            object oOnHandWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
            int bOnHand = (GetBaseItemType(oOnHandWeapon) == BASE_ITEM_LONGSWORD);
            object oOffHandWeapon = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
            int bOffHand = (GetBaseItemType(oOffHandWeapon) == BASE_ITEM_LONGSWORD);
            
            int nDuration = GetLocalInt(oPC, PRC_ShiningBlade_Duration);
            int nLevel = GetLocalInt(oPC, PRC_ShiningBlade_Level);
            
            object oChangedWeapon = OBJECT_INVALID;
            switch (GetLocalInt(oPC,"ONEQUIP"))
            {
                case 1: //Unequip
                    oChangedWeapon = GetItemLastUnequipped();
                    if (GetBaseItemType(oChangedWeapon) == BASE_ITEM_LONGSWORD)
                    {
                        if (DEBUG_EVENTS) DoDebug("$$$  prc_sbheir: Unequipping longsword");
                        ShiningBlade_ApplyProperties(oChangedWeapon, 0, nLevel);
                    }
                    else
                    {
                        if (DEBUG_EVENTS) DoDebug("$$$  prc_sbheir: Unequipping non-longsword");                        
                    }
                    break;
                    
                case 2: //Equip
                    oChangedWeapon = GetItemLastEquipped();
                    if (GetBaseItemType(oChangedWeapon) == BASE_ITEM_LONGSWORD)
                    {
                        if (DEBUG_EVENTS) DoDebug("$$$  prc_sbheir: Equipping longsword");
                        //Apply the bonuses with the full duration, even though part of that time has already been used up.
                        //The bonus expiration function will remove them at the proper time.
                        ShiningBlade_ApplyProperties(oChangedWeapon, nDuration, nLevel);
                    }
                    else
                    {
                        if (DEBUG_EVENTS) DoDebug("$$$  prc_sbheir: Equipping non-longsword");                        
                    }
                    break;
            }
            
            ShiningBlade_ApplyAttackBonuses(oPC, bOnHand, bOffHand, nLevel);
        }
        else if(GetLocalInt(oPC,"ONREST"))
        {
            //Expire Shining Blade bonuses upon resting (this will happen due to time passing during normal resting, but not when ForceRest is called)
            int nGeneration = GetLocalInt(oPC, PRC_ShiningBlade_Generation);
            int nLevel = GetLocalInt(oPC, PRC_ShiningBlade_Level);
            ShiningBlade_ExpireBonuses(oPC, nGeneration, nLevel);
            SetLocalInt(oPC, PRC_ShiningBlade_Generation, PRC_NextGeneration(nGeneration));
        }
        else
        {
            if (DEBUG_EVENTS) DoDebug("$$$  prc_sbheir: EvalPRCFeats");
        }
    }
    else
    {
        if (DEBUG_EVENTS) DoDebug("$$$  prc_sbheir: nEvent == " + IntToString(nEvent));        
    }
}