/// <reference path="../ContentUnit.ts" />
/// <reference path="../../Things/Person.ts" />
/// <reference path="../../Things/Bodypart/SexHole.ts" />
/// <reference path="../../Things/Bodypart/SexStick.ts" />
class FuckingUnit extends ContentUnit {
    private fucker : ContentDifferential = new ContentDifferential(Person);
    private fucked : ContentDifferential = new ContentDifferential(Person);
    private hole : ContentDifferential = new ContentDifferential(SexHole);
    private stick : ContentDifferential = new ContentDifferential(SexStick);
    private markers : ContentDifferential = new ContentDifferential();

    public constructor () {
        super();
    }

    public setFucker (it : Thing | typeof Thing) {
        this.fucker = new ContentDifferential(it);
        return this;
    }

    public setFucked (it : Thing | typeof Thing) {
        this.fucked = new ContentDifferential(it);
        return this;
    }

    public setHole (it : Thing | typeof Thing) {
        this.hole = new ContentDifferential(it);
        return this;
    }

    public setStick (it : Thing | typeof Thing) {
        this.stick = new ContentDifferential(it);
        return this;
    }

    public addMarker (marker : ContentMarker) {
        this.markers.addNoun(marker);
        return this;
    }

    public getScore () {
        return this.fucker.getScore() + this.fucked.getScore() + this.hole.getScore() + this.stick.getScore() + this.markers.getScore();
    }

    public isMatch (fu : FuckingUnit) {
        if (fu instanceof FuckingUnit) {
            return this.fucker.isMatch(fu.fucker) && this.fucked.isMatch(fu.fucked) &&
                this.hole.isMatch(fu.hole) && this.stick.isMatch(fu.stick) && this.markers.isMatch(fu.markers);
        }
        return false;
    }
}