/**
 * Magical object type interfaces — break the circular dependency between
 * Character.ts and the magical object implementations.
 *
 * These interfaces describe magical objects from Character's point of view,
 * so Character can depend on abstractions rather than concrete classes.
 */
import type { Character } from '../characters/Character.ts';
import type { MagicalObjectStatus } from './MagicalObject.ts';

/** A magical object that deals damage — from Character's point of view */
export interface DamageDealer {
  readonly owner: Character;
  readonly health: number;
  readonly status: MagicalObjectStatus;
  use(target: Character): { weapon: DamageDealer; target: Character };
}

/** A magical object that heals — from Character's point of view */
export interface Healer {
  readonly health: number;
  readonly status: MagicalObjectStatus;
  heal(character: Character, amount: number): { object: Healer; character: Character };
}
