export interface DS4ActorDataType {
    attributes: DS4ActorDataAttributes;
    traits: DS4ActorDataTraits;
    combatValues: DS4ActorDataCombatValues;
    baseInfo: DS4ActorDataBaseInfo;
    progression: DS4ActorDataProgression;
}

interface DS4ActorDataAttributes {
    body: BodyAttribute;
    mobility: ModifiableData<number>;
    mind: ModifiableData<number>;
}

export interface ModifiableData<T> {
    base: T;
    mod: T;
    total?: T;
}

interface UsableResource<T> {
    total: T;
    used: T;
}

interface CurrentData<T> extends ModifiableData<T> {
    current: T;
}

// Blueprint in case we need more detailed differentiation
type BodyAttribute = ModifiableData<number>;

interface DS4ActorDataTraits {
    strength: ModifiableData<number>;
    constitution: ModifiableData<number>;
    agility: ModifiableData<number>;
    dexterity: ModifiableData<number>;
    intellect: ModifiableData<number>;
    aura: ModifiableData<number>;
}

interface DS4ActorDataCombatValues {
    hitPoints: CurrentData<number>;
    defense: ModifiableData<number>;
    initiative: ModifiableData<number>;
    movement: ModifiableData<number>;
    meleeAttack: ModifiableData<number>;
    rangedAttack: ModifiableData<number>;
    spellcasting: ModifiableData<number>;
    targetedSpellcasting: ModifiableData<number>;
}

interface DS4ActorDataBaseInfo {
    race: string;
    class: string;
    heroClass: string;
    racialAbilities: string;
}

interface DS4ActorDataProgression {
    level: number;
    experiencePoints: number;
    talentPoints: UsableResource<number>;
    progressPoints: UsableResource<number>;
}