import { promises as fs } from 'fs';
import { StructuredPrompt } from '../types';

export async function loadPrompts(filePath: string): Promise<StructuredPrompt[]> {
  try {
    const fileContent = await fs.readFile(filePath, 'utf-8');
    const promptsData = JSON.parse(fileContent);
    
    return Object.entries(promptsData).map(([name, data]: [string, any]) => 
      loadPromptFromJson(name, data)
    );
  } catch (error) {
    console.error(`Error loading prompts from ${filePath}:`, error);
    throw new Error(`Failed to load prompts from ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
  }
}

export function loadPromptFromJson(name: string, promptData: any): StructuredPrompt {
  if (!isValidPromptData(promptData)) {
    throw new Error(`Invalid prompt data for ${name}`);
  }

  return {
    name,
    description: promptData.description || '',
    input_schema: promptData.input_schema,
    output_schema: promptData.output_schema,
    system_message: promptData.system_message,
    user_message: promptData.user_message,
    config: promptData.config || promptData.options || {},
    tools: promptData.tools || [] // Add this line to include the tools array
  };
}

function isValidPromptData(promptData: any): boolean {
  return (
    promptData &&
    typeof promptData.input_schema === 'object' &&
    typeof promptData.output_schema === 'object' &&
    typeof promptData.system_message === 'string' &&
    typeof promptData.user_message === 'string' &&
    Array.isArray(promptData.tools) // Add this line to check for the tools array
  );
}

export function loadPromptFromJsonFile(promptName: string): StructuredPrompt {
  const promptsJson = require('../config/prompts.json');
  const promptData = promptsJson[promptName];

  if (!promptData) {
    throw new Error(`Prompt ${promptName} not found in prompts.json`);
  }

  return loadPromptFromJson(promptName, promptData);
}