interface TalentTree {
  id: number
  name: string // e.g. Affliction
  icon: string
  talents: Talent[]
}

interface SpellData {
  id?: number
  name: string
  rank: number
  icon: string
  description: string
}

interface ClassData {
  id: number
  name: string
  icon: string
  specs: number[]
}

interface TalentData {
  /** ID for the Talent */
  id: number
  /** Row for talent. Starts at 0 */
  row: number
  /** Column for talent. Starts at 0 */
  col: number
  /** Icon */
  icon: string
  /** Array of spell IDs */
  ranks: number[]
  /** Talent dependencies for this talent */
  requires: Array<{
    /** Talent ID */
    id: number
    /** Amount of points required in this talent */
    qty: number
  }>
}

interface Talent {
  name: string
  row: number
  column: number
  type: 'ability' | 'talent'
  ranks: string[]
  prerequisite?: [number, number] | number // [row, column] OR index 
}

type TalentClickHandler = (specId: number, talentId: number, modifier: 1 | -1) => void
