import Handsontable from "handsontable"
import numbro from 'numbro';
import { textRenderer } from "handsontable/renderers"
import { TricksterItem } from "../trickster"
import Core from "handsontable/core";

export const BasicColumns = [
  "Image","Name","Count",
] as const

export const DetailsColumns = [
  "Desc","Use",
] as const

export const MoveColumns = [
  "MoveCount","Move",
] as const

export const TagColumns = [
  "All","Equip","Drill","Card","Quest","Consume", "Compound"
] as const

export const EquipmentColumns = [
  "MinLvl","Slots","RefineNumber","RefineState",
] as const

export const StatsColumns = [
  "AP","GunAP","AC","DX","MP","MA","MD","WT","DA","LK","HP","DP","HV",
] as const

export const HackColumns = [
] as const

export const ColumnNames = [
  ...BasicColumns,
  ...MoveColumns,
  ...DetailsColumns,
  ...EquipmentColumns,
  ...StatsColumns,
  ...TagColumns,
  ...HackColumns,
] as const

export type ColumnName = typeof ColumnNames[number]

const c = (a:ColumnName | ColumnInfo):ColumnName => {
  switch(typeof a) {
    case "string":
      return a
    case "object":
      return a.name
  }
}
export const LazyColumn = c;

export const ColumnSorter  = (a:ColumnName | ColumnInfo, b: ColumnName | ColumnInfo):number => {
  let n1 = ColumnNames.indexOf(c(a))
  let n2 = ColumnNames.indexOf(c(b))
  if(n1 == n2) {
    return 0
  }
  return n1 > n2 ? 1 : -1
}

export interface ColumnInfo  {
  name: ColumnName
  displayName:string

  options?:(s:string[])=>string[]
  renderer?:any
  filtering?:boolean
  writable?:boolean
  getter(item:TricksterItem):(string | number)
}