///<reference path="../ContentAtom.ts"/>
///<reference path="../ContentNounSimple.ts"/>
/**
 * This atom should be used in place of the default atom when handling Combat.
 */
class ContentAtomCombat extends ContentAtom {
    /**
     * Only one of the following markers appears at once.
     */
    public static HIT = new ContentNounSimple("HIT");
    public static MISS = new ContentNounSimple("MISS");
    public static CRITICAL = new ContentNounSimple("CRITICAL");

    /**
     * Only one of the following markers appears at once.
     */
    public static KNOCKED = new ContentNounSimple("KNOCKED");
    public static KNOCKED_OFF = new ContentNounSimple("KNOCKED_OFF");
    public static KILLED = new ContentNounSimple("KILLED");

    public attacker : any;
    public target : any;
    public weapons : ContentAtom = new ContentAtom();
    public markers : ContentAtom = new ContentAtom();

    constructor (attacker : any, target : any, weapons : Array<any> = [], markers : Array<ContentNounSimple | ContentNoun> = []) {
        super();
        this.attacker = attacker;
        this.target = target;
        this.weapons.addNoun(...weapons);
        this.markers.addNoun(...markers);
    }

    public compareAgainst (other : ContentAtom) {
        if (other instanceof ContentAtomCombat) {
            console.warn(
                ContentAtom.compareNoun(this.attacker, other.attacker) &&
                ContentAtom.compareNoun(this.target, other.target) &&
                this.weapons.compareAgainst(other.weapons) &&
                this.markers.compareAgainst(other.markers),

            );
            return (
                ContentAtom.compareNoun(this.attacker, other.attacker) &&
                ContentAtom.compareNoun(this.target, other.target) &&
                this.weapons.compareAgainst(other.weapons) &&
                this.markers.compareAgainst(other.markers)
            );
        }
        return false;
    }

    public getAtomPriority () {
        return (
            ContentAtom.weightNoun(this.attacker) +
            ContentAtom.weightNoun(this.target) +
            this.weapons.getAtomPriority() +
            this.markers.getAtomPriority()
        );
    }
}

//new ContentAtomCombat(WorldState.player, OrcDebugger, [HumanoidHands], [ContentAtomCombat.HIT]);
//Looks good.