import type { BossMotionState, BossState, MemberId, PartyMember, PulseKind, WorldPosition } from "../types";

export interface BossMechanicEvent {
  at: number;
  message: string;
  tone?: "danger" | "neutral";
  pulseKind?: PulseKind;
  targetId?: MemberId;
}

export interface BossMechanicResult {
  boss: BossState;
  motion: BossMotionState;
  party: PartyMember[];
  events: BossMechanicEvent[];
}

export interface BossMechanicContext {
  boss: BossState;
  motion: BossMotionState;
  party: PartyMember[];
  partyPositions: Record<MemberId, WorldPosition>;
  time: number;
  delta: number;
  damageMember: (member: PartyMember, amount: number, position: WorldPosition, at: number, kind?: "direct" | "hazard") => PartyMember;
}

export interface UpcomingMechanic {
  name: string;
  remaining: number;
  cycle: number;
  urgent: boolean;
}
