// #region CHARACTER DATA
export interface Ability {
  name: string;
  shortDescription: string;
  longDescription: string;
  cost: string;
  charges: number;
  currentlyUsedCharges: number;
}

export interface Attribute {
  name: string;
  value: number;
  proficiency: boolean;
  advantage?: 'none' | 'advantage' | 'disadvantage';
}

export interface Skill {
  name: string;
  proficiency: boolean;
  bardicExpertise?: boolean;
  advantage?: 'none' | 'advantage' | 'disadvantage';
}

export interface Trait {
  name: string;
  shortDescription: string;
  longDescription: string;
  origin: string;
}
// #endregion

// #region CLASSES AND SUBCLASSES
export interface ClassData {
  title: string;
  subclassLevel: number;
  description: string;
  features: any[];
}

export interface SubclassData {
  title: string;
  description: string;
  features: any[];
}
// #endregion

// #region EQUIPMENT
export interface Weapon {
  name: string;
  damage: Damage[];
  attackBonus: string;
  useAttributeModifier: boolean;
  hasAdditionalDamage: boolean;
  additionalDamage: number;
  range: number[];
  hasReach: boolean;
  throwRange?: number[];
  proficient: boolean;
  isVersatile: boolean;
  isTwoHanded: boolean;
  isFinesse: boolean;
  isRanged: boolean;
  canBeThrown: boolean;
  weight: string;
  versatileDamage?: string;
  isMagical: boolean;
  magicBonus?: number;
  description: string;
}

export interface SimpleItem {
  name: string;
  weight: number;
  value: number;
  quantity: number;
  description?: string;
}

export interface Consumable {
  name: string;
  weight: number;
  value: number;
  quantity: number;
  description: string;
}

export interface Food {
  name: string;
  isReady: boolean;
  quantity: number;
  weight: number;
  description?: string;
}

export interface Misc {
  name: string;
  weight: number;
  value: number;
  quantity: number;
  description?: string;
}
// #endregion

// #region DAMAGE AND HEAL
export interface Damage {
  diceNumber: number;
  diceType: number;
  damageType: string;
  additionalDamage?: number;
}

export interface Heal {
  diceNumber: number;
  diceType: number;
  additionalHeal?: number;
}
// #endregion

// #region SPELLS
export interface Spell {
  id: number;
  isCustom: boolean;
  german: string;
  english: string;
  image: string;
  classes: string[];
  level: number;
  timeToCast: number;
  cost:
    | 'action'
    | 'bonus'
    | 'reaction'
    | 'rounds'
    | 'minutes'
    | 'hours'
    | 'days';
  duration: number;
  durationType:
    | 'instant'
    | 'rounds'
    | 'minutes'
    | 'hours'
    | 'days'
    | 'permanent';
  isRitual: boolean;
  needsConcentration: boolean;
  needsVerbal: boolean;
  needsSomatic: boolean;
  needsMaterial: boolean;
  school: string;
  description_de: string;
  description_en: string;
  needsAttackRoll: boolean;
  needsSavingThrow: boolean;
  savingThrowAttribute?: string;
  isRanged: boolean;
  range?: number;
  hasAreaOfEffect: boolean;
  length?: number;
  areaOfEffectType?: string;
  doesDamage: boolean;
  damage?: Damage[];
  doesHeal: boolean;
  heal?: Heal;
}
// #endregion
