const { HTMLField, SchemaField, NumberField, StringField, BooleanField, FilePathField, ArrayField } = foundry.data.fields;
import { nullPlaybookKey, playbookKeys, lookupPlaybook } from './playbooks.mjs';
const textField = () => new StringField({ required: true, blank: true });
const promptField = () => new SchemaField({
    question: textField(),
    answer: textField()
});
const harmField = () => new SchemaField({
    marked: new BooleanField({ required: true }),
    description: textField(),
});
export class HenchDataModel extends foundry.abstract.TypeDataModel {
    static defineSchema() {
        return {
            name: textField(),
            look: textField(),
            detailAnswers: new SchemaField({
                one: textField(),
                two: textField(),
            }),
            customInclination: textField(),
            harm: new SchemaField({
                levelOne: new SchemaField({
                    one: harmField(),
                    two: harmField(),
                }),
                levelTwo: new SchemaField({
                    one: harmField(),
                    two: harmField(),
                }),
                levelThree: new SchemaField({
                    one: harmField(),
                }),
                levelFour: new SchemaField({
                    one: harmField(),
                }),
            }),
            stress: new NumberField({ required: true, integer: true, min: 0, initial: 0, max: 12 }),
            experience: new NumberField({ required: true, integer: true, min: 0, initial: 0, max: 5 }),
            playbook: new StringField({ required: true, blank: false, initial: nullPlaybookKey, options: playbookKeys }),
        };
    }
    static migrateData(source) {
        // No migrations yet - base case.
        return super.migrateData(source);
    }
    get dead() {
        return !!this.harm.levelFour.marked;
    }
    get playbookDetails() {
        return lookupPlaybook(this.playbook);
    }
    // TODO IMPLEMENT advancements
    get gearLimit() {
        return 3;
    }
    get hasPlaybookSelected() {
        return this.playbook !== nullPlaybookKey;
    }
    get detailQuestions() {
        return this.playbookDetails?.detailQuestions;
    }
    get inclinations() {
        const base = this.playbookDetails?.inclinations ?? {};
        return {
            ...base,
            custom: this.customInclination
        };
    }
    get missionPlanningQuestions() {
        return this.playbookDetails?.missionPlanningQuestions;
    }
    get expTriggers() {
        const fromPlaybook = this.playbookDetails?.expTrigger;
        let triggers = {
            one: "You acted on your inclinations.",
            two: "You made the boss proud.",
            three: "Your home life interfered with the mission."
        };
        if(fromPlaybook) {
            triggers.four = fromPlaybook;
        }
        return triggers;
    }
}