/**
 * Type definitions for unit-related types
 */

/**
 * Unit base stats
 */
export interface UnitStats {
  health: number;
  attack: number;
  defense: number;
  magic: number;
  speed: number;
  willpower: number;
  movement: number;
  tech: number;
}

/**
 * Unit position
 */
export interface Position {
  x: number;
  y: number;
  z: number;
}

/**
 * Unit facing direction
 */
export type FacingDirection = "NORTH" | "SOUTH" | "EAST" | "WEST";

/**
 * Unit type
 */
export type UnitType = "EXPLORER" | "ENEMY" | "STRUCTURE";

/**
 * Unit team
 */
export type UnitTeam = "PLAYER" | "ENEMY" | "NEUTRAL";

/**
 * Unit status
 */
export type UnitStatus = "READY" | "INJURED" | "DEPLOYED" | "DEAD";

/**
 * Status effect
 */
export interface StatusEffect {
  id: string;
  type: string;
  duration: number;
  [key: string]: unknown;
}

/**
 * Class mastery data
 */
export interface ClassMastery {
  level: number;
  xp: number;
  skillPoints: number;
  unlockedNodes: string[];
}

/**
 * Equipment slots
 */
export interface Equipment {
  weapon: unknown | null;
  armor: unknown | null;
  utility: unknown | null;
  relic: unknown | null;
}

/**
 * Unit definition from registry
 */
export interface UnitDefinition {
  type?: UnitType;
  name: string;
  stats?: Partial<UnitStats>;
  model?: string;
  ai_archetype?: string;
  aggro_range?: number;
  xp_value?: number;
  loot_table?: string;
  [key: string]: unknown;
}

/**
 * Explorer unit data (for roster)
 */
export interface ExplorerData {
  id: string;
  name: string;
  classId: string;
  status: UnitStatus;
  history: {
    missions: number;
    kills: number;
  };
  /** Active class ID (for multi-class support) */
  activeClassId?: string;
  /** Class mastery progression data */
  classMastery?: Record<string, ClassMastery>;
  [key: string]: unknown;
}

/**
 * Roster save data
 */
export interface RosterSaveData {
  roster: ExplorerData[];
  graveyard: ExplorerData[];
}

