import {
  CharClass,
  ClassUtils,
  Extra,
  ExtraUtils,
  Item,
  ItemUtils,
  Spell,
  SpellUtils,
} from "@dndbeyond/character-rules-engine/es";

import { AppNotificationUtils } from "../../utils";

export function handleItemAddAccepted(item: Item, amount: number): void {
  if (ItemUtils.isPack(item)) {
    AppNotificationUtils.dispatchSuccess(
      "Equipment Pack Added",
      `${ItemUtils.getName(item)} items added to your inventory`
    );
  } else {
    if (amount >= 1) {
      let itemName = ItemUtils.getDefinitionName(item);
      let displayName = itemName ? `"${itemName}"` : "unknown";
      let toastMessage = `Added ${displayName} item`;
      if (amount > 1) {
        toastMessage = `Added ${amount} ${displayName} items`;
      }
      AppNotificationUtils.dispatchSuccess("Equipment Added", toastMessage);
    }
  }
}
export function handleItemAddRejected(item: Item, amount: number): void {
  AppNotificationUtils.dispatchError(
    "Equipment Not Added",
    `${ItemUtils.getName(item)} could not be added to your inventory`
  );
}

export function handleStartingEquipmentAccepted(): void {
  AppNotificationUtils.dispatchSuccess(
    "Equipment Chosen",
    "Starting Equipment Added to Inventory"
  );
}

export function handleStartingEquipmentRejected(): void {
  AppNotificationUtils.dispatchSuccess(
    "Starting Equipment Skipped",
    "No items added to inventory"
  );
}

export function handleStartingGoldAccepted(): void {
  AppNotificationUtils.dispatchSuccess(
    "Gold Added",
    "Starting Gold Added to Currencies Section"
  );
}

export function handleSpellCreateAccepted(
  spell: Spell,
  charClass: CharClass
): void {
  AppNotificationUtils.dispatchSuccess(
    "Spell Added",
    `Added ${SpellUtils.getName(spell)} spell to your ${ClassUtils.getName(
      charClass
    )}`
  );
}

//TODO Extras - move into manager somehow?
export function handleExtraCreateAccepted(extra: Extra): void {
  AppNotificationUtils.dispatchSuccess(
    `${ExtraUtils.getExtraType(extra)} Added`,
    `Added "${ExtraUtils.getName(extra)}"`
  );
}
