#include <lib.h>
#include <armor_types.h>
#include <damage_types.h>
inherit LIB_ARMOR;
object breathershadow;

int charge = 1000;
int maxcharge = 1000;

string LongD(){
    string ret = "This remarkably small device fits over the "+
    "wearer's mouth, and provides a long supply of oxygenated "+
    "air. Its current charge level is "+
    to_int(percent(charge,maxcharge))+" percent.";
    return ret;
}

static void create(){
    armor::create();
    SetKeyName("breathing mask");
    SetId(({"mask","breather","a99","apparatus","device"}));
    SetAdjectives(({"a99","breathing"}));
    SetShort("an A99 breathing device");
    SetLong( (: LongD :) );
    SetMass(50);
    SetBaseCost("silver",1000);
    SetArmorType(A_CUSTOM);
    SetRestrictLimbs( ({ "head"}) );
    AddSave( ({ "charge" }) );
}

void init(){
    ::init();
}

int SetCharge(int i){
    charge = i;
}

int SetMaxCharge(int i){
    maxcharge = i;
}

mixed eventEquip(object who, string array limbs){
    mixed success = armor::eventEquip(who, limbs);
    breathershadow = new("/shadows/breather");
    if(success){
        if(breathershadow) breathershadow->eventShadow(who);
    }
    else if(breathershadow) destruct(breathershadow);
    return success;
}

varargs mixed eventUnequip(object who) {
    mixed success;
    if(!who) who = this_player();
    success = armor::eventUnequip(who);
    if(success){
        if(breathershadow) breathershadow->eventUnshadow();
    }
    if(breathershadow) destruct(breathershadow);
    return success;
}

int eventDecrementCharge(){
    int perc;
    if(!GetWorn()) return 0;
    if(previous_object() != breathershadow) return 0;
    if(charge < 1) charge = 0;
    else charge--;

    perc = to_int(percent(charge, maxcharge));
    if(perc < 10){
        tell_object(environment(this_object()),"The "+remove_article(GetShort())+" beeps loudly!");
        return charge;
    }

    if(perc < 20){
        tell_object(environment(this_object()),"The "+remove_article(GetShort())+" beeps softly.");
        return charge;
    }

    return charge;
}

int GetRemainingCharge(){
    if(!charge){
        if(breathershadow) breathershadow->eventUnshadow();
    }
    if(!GetWorn()) return 0;
    return charge;
}

