/**
 * API Server Example
 * 
 * This example shows how to expose Brainy through REST, WebSocket, and MCP APIs
 * using the APIServerAugmentation.
 * 
 * Zero-config philosophy: Just create and register the augmentation!
 */

import { Brainy } from '../src/index.js'
import { APIServerAugmentation } from '../src/augmentations/apiServerAugmentation.js'

async function main() {
  // 1. Create Brainy with zero config
  const brain = new Brainy()
  await brain.init()
  
  // 2. Add some sample data
  await brain.add({ data: "The quick brown fox", type: 'content', metadata: { type: "sentence", category: "animals" } })
  await brain.add({ data: "Machine learning models", type: 'content', metadata: { type: "tech", category: "AI" } })
  await brain.add({ data: "Natural language processing", type: 'content', metadata: { type: "tech", category: "NLP" } })
  
  // 3. Create and register the API Server augmentation
  const apiServer = new APIServerAugmentation({
    port: 3000,
    host: 'localhost'
  })
  
  // Register the augmentation with Brainy
  brain.augmentations.register(apiServer)
  
  // Initialize augmentations with Brainy context
  await brain.augmentations.initialize({
    brain,
    log: (msg: string, level?: string) => console.log(`[${level || 'info'}] ${msg}`),
    config: {}
  })
  
  console.log('🚀 Brainy API Server is running!')
  console.log('📡 REST API: http://localhost:3000')
  console.log('🔌 WebSocket: ws://localhost:3000/ws')
  console.log('🧠 MCP: http://localhost:3000/api/mcp')
  console.log('')
  console.log('Try these endpoints:')
  console.log('  GET  http://localhost:3000/health')
  console.log('  POST http://localhost:3000/api/search')
  console.log('       Body: { "query": "fox", "limit": 10 }')
  console.log('  POST http://localhost:3000/api/add')
  console.log('       Body: { "content": "New data", "metadata": {} }')
  console.log('')
  console.log('Press Ctrl+C to stop the server')
}

// Run the example
main().catch(console.error)

/**
 * Example REST API calls:
 * 
 * # Health check
 * curl http://localhost:3000/health
 * 
 * # Search
 * curl -X POST http://localhost:3000/api/search \
 *   -H "Content-Type: application/json" \
 *   -d '{"query": "fox", "limit": 5}'
 * 
 * # Add data
 * curl -X POST http://localhost:3000/api/add \
 *   -H "Content-Type: application/json" \
 *   -d '{"content": "The cat sat on the mat", "metadata": {"type": "sentence"}}'
 * 
 * # Get by ID
 * curl http://localhost:3000/api/get/[id]
 * 
 * # Statistics
 * curl http://localhost:3000/api/stats
 */

/**
 * Example WebSocket client (browser):
 * 
 * const ws = new WebSocket('ws://localhost:3000/ws')
 * 
 * ws.onopen = () => {
 *   // Subscribe to all operations
 *   ws.send(JSON.stringify({
 *     type: 'subscribe',
 *     operations: ['all']
 *   }))
 *   
 *   // Perform a search
 *   ws.send(JSON.stringify({
 *     type: 'search',
 *     query: 'fox',
 *     limit: 5,
 *     requestId: '123'
 *   }))
 * }
 * 
 * ws.onmessage = (event) => {
 *   const msg = JSON.parse(event.data)
 *   console.log('Received:', msg)
 * }
 */