/// <reference path="../../Bodypart.ts" />
/// <reference path="../../Humanoid/Humanoid.ts" />
/// <reference path="../SexStick.ts" />
/// <reference path="../SexHole.ts" />
/// <reference path="../../../Measure.ts" />
class HumanoidVagina extends SexHole {
    public genderValue = 85;
    public genderWeight = Bodypart.WEIGHT_HIGHEST;
    public slots : Array<number> = [Humanoid.SLOT_CROTCH_FRONT];
    public sluttiness = 50;
    public sluttinessWeight = Bodypart.WEIGHT_MEDIUM;

    public getSluttiness () {
        // reverse femininity!
        let slut = 100 - this.genderValue; // genderValue goes from 50 to 100, so this is 50 max.
        let obscenelyOpen = false; // TODO: Grab from sexHole openness.

        slut += obscenelyOpen ? 25 : 0;

        return slut;
    }

    public getDescription () {
        let say = new Say("Your ");
        let hairless = this.genderValue >= 80;
        let smallClit = this.genderValue >= 55;
        let innie = this.genderValue > 70;
        let obscenelyOpen = false; // TODO: Grab from sexHole openness.

        if (hairless) {
            say.add("hairless ", Say.PUSSY);
        } else {
            say.add("hairy ", Say.PUSSY);
        }

        say.add(" ");

        if (innie) {
            say.add("is usually completely covered by its lips")
        } else {
            say.add("has some curtains escaping its lips")
        }

        if (!smallClit) {
            say.add(" and has an oversized clit");
        }

        say.add(".");

        if (obscenelyOpen) {
            say.add(" It is currently stretched open obscenely.");
        }

        return say;
    }

    public arrangeGenderValue (gv : number) {
        // Pussies range from 50 to 100 only.
        gv = (gv / 2) + 50;
        this.genderValue = gv;
        (<Humanoid> this.getPartOne()).invalidateCaches();
        return;
    }

    public static getSynonym () {
        // TODO: Add more when creative.
        let cockNames = [
            "pussy",
            "womanhood"
        ];
        return (new OneOf(OneOf.PURELY_AT_RANDOM, ...cockNames).getOne());
    }
}