import { PromptDefinition } from "../types/common";

export class StructuredPrompt {
  constructor(public definition: PromptDefinition) {}

  getPriority(): number | undefined {
    return this.definition.priority;
  }

  setPriority(priority: number): void {
    this.definition.priority = priority;
  }

  getConfig(): PromptDefinition['config'] | undefined {
    return this.definition.config;
  }

  setConfig(config: PromptDefinition['config']): void {
    this.definition.config = config;
  }

  render(variables: Record<string, string>, availablePrompts: PromptDefinition[]): string {
    let renderedPrompt = this.definition.template;

    // Replace variables
    for (const [key, value] of Object.entries(variables)) {
      renderedPrompt = renderedPrompt.replace(new RegExp(`{{${key}}}`, 'g'), value);
    }

    // Add available prompts information
    const availablePromptsInfo = availablePrompts
      .map(p => `- ${p.name}: ${p.description}`)
      .join('\n');
    renderedPrompt = renderedPrompt.replace('{{available_prompts}}', availablePromptsInfo);

    // Add config information if available
    if (this.definition.config) {
      renderedPrompt += '\nConfig:';
      for (const [key, value] of Object.entries(this.definition.config)) {
        renderedPrompt += `\n- ${key}: ${value}`;
      }
    }

    return renderedPrompt;
  }
}