/**
 * Interfaces for the game engine
 */

import { WorldModel, GameState } from './world-model';
import { ActionResponse, NarrativeResponse } from './llm';

export interface ActionResult {
  success: boolean;
  message: string;
  stateChanged: boolean;
  newState?: GameState;
}

export interface GameEngine {
  loadWorld(worldModelPath: string): Promise<void>;
  getCurrentState(): GameState;
  getWorldModel(): WorldModel;
  
  // Action processing
  processAction(action: ActionResponse): ActionResult;
  
  // State management
  saveGame(filename: string): Promise<void>;
  loadGame(filename: string): Promise<void>;
  
  // Helper methods for world interaction
  getAvailableActions(): string[];
  getVisibleObjects(): string[];
  getVisibleCharacters(): string[];
  getCurrentRoomDescription(): string;
  
  // Game flow
  start(): Promise<string>; // Returns introduction text
  end(): void;
}

export interface GameSession {
  engine: GameEngine;
  history: {
    playerInput: string;
    actionResponse: ActionResponse;
    actionResult: ActionResult;
    narrativeResponse: NarrativeResponse;
  }[];
  startTime: Date;
  lastInteractionTime: Date;
}

export interface ActionHandler {
  execute(
    gameState: GameState,
    worldModel: WorldModel,
    action: ActionResponse
  ): ActionResult;
}