/**
 * @param {App.Entity.SlaveState} slave
 * @returns {string}
 */
App.Desc.vaginalAccessory = function(slave) {
	const r = [];
	const {
		he, him, his, hers, himself, boy, He, His
	} = getPronouns(slave);
	let held;
	if (slave.chastityVagina) {
		held = "held in place by a chastity belt";
	} else if (slave.vaginalAccessory === "bullet vibrator" || slave.vaginalAccessory === "smart bullet vibrator") {
		held = "held in place by a strap";
	} else {
		held = `held in place by a strap, which ${he} can remove for vaginal intercourse`;
	}
	switch (slave.vaginalAccessory) {
		case "bullet vibrator":
		case "smart bullet vibrator":	// FIXME: two different descriptions?
			r.push(`A bullet vibrator is attached on ${his} clit, ${held}.`);	// FIXME: not super happy with this
			break;
		case "dildo":
			/* TODO: these may need to be updated for slaves with gaping+ vaginas */
			r.push(`${His} pussy is filled by a dildo ${held}.`);
			break;
		case "long dildo":
			r.push(`${His} pussy is filled by a very long dildo ${held}. It noticeably bulges ${his} stomach.`);
			break;
		case "large dildo":
			r.push(`${His} pussy is`);
			if (slave.vagina < 2) {
				r.push(`painfully stretched`);
			} else if (slave.vagina < 3) {
				r.push(`uncomfortably filled`);
			} else {
				r.push(`comfortably filled`);
			}
			r.push(`by a large dildo ${held}.`);
			break;
		case "long, large dildo":
			r.push(`${His} pussy is`);
			if (slave.vagina < 2) {
				r.push(`painfully stretched`);
			} else if (slave.vagina < 3) {
				r.push(`uncomfortably filled`);
			} else {
				r.push(`comfortably filled`);
			}
			r.push(`by a very long and large dildo ${held}. It noticeably bulges ${his} stomach.`);
			break;
		case "huge dildo":
			if (slave.vagina < 4) {
				r.push(`${His} pussy is filled to the breaking point by an enormous dildo.`);
				if (slave.fetish === "masochist" && slave.fetishKnown === 1 && slave.fetishStrength > 60) {
					r.push(`${He} can barely move with the discomfort, but ${he} frequently climaxes with agony.`);
				} else {
					r.push(`${He} can barely move with the discomfort, and ${he} sometimes breaks down in tears at having ${his} cunt permanently stretched.`);
				}
			} else {
				r.push(`${His} cavernous pussy is comfortably filled by a huge dildo.`);
			}
			if (slave.chastityVagina) {
				r.push(`A chastity belt locks it securely in place.`);
			}
			break;
		case "long, huge dildo":
			if (slave.vagina < 4) {
				r.push(`${His} pussy is filled to the breaking point by an enormously wide and long dildo. It noticeably bulges ${his} stomach.`);
				if (slave.fetish === "masochist" && slave.fetishKnown === 1 && slave.fetishStrength > 60) {
					r.push(`${He} can barely move with the discomfort, but ${he} frequently climaxes with agony.`);
				} else {
					r.push(`${He} can barely move with the discomfort, and ${he} sometimes breaks down in tears at having ${his} cunt permanently stretched.`);
				}
			} else {
				r.push(`${His} cavernous pussy is comfortably filled by an enormously wide and long dildo. It noticeably bulges ${his} stomach.`);
			}
			if (slave.chastityVagina) {
				r.push(`A chastity belt locks it securely in place.`);
			}
			break;
		default:
			if (slave.chastityVagina) {
				r.push(`${His} pussy is protected by a chastity`);
				if (slave.clothes !== "no clothing") {
					r.push(`belt worn under ${his} clothing.`);
				} else {
					r.push(`belt.`);
				}
			}
			break;
	}
	r.push(App.Desc.vaginalAttachment(slave));
	if (slave.chastityVagina && V.arcologies[0].FSRestart !== "unset") {
		r.push(`This pleases the Societal Elite.`);
	}

	return r.join(" ");
};

/**
 * @param {App.Entity.SlaveState} slave
 * @returns {string}
 */
App.Desc.vaginalAttachment = function(slave) {
	const r = [];
	const {
		his, He, His
	} = getPronouns(slave);
	switch (slave.vaginalAttachment) {
		case "vibrator":
			// TODO: not sure about this description
			r.push(`${He} looks distinctly uncomfortable as ${his} dildo buzzes every so often.`);
			if (slave.chastityVagina) {
				r.push(`The chastity belt locking it in place means there is no escape.`);
			}
			// TODO: add descriptions for slaves with gaping+ vaginas
			break;
		default:
			if (slave.vaginalAccessory !== "none") {
				r.push(`${His} current accessory is silent.`);
			}
	}
	return r.join(" ");
};

src/npc/descriptions/crotch/vaginalAccessory.js