/**
 * Voyage AI RAG Server
 * Generated by vai v{{vaiVersion}} on {{generatedAt}}
 * 
 * Endpoints:
 * - POST /api/search  - Semantic search with optional reranking
 * - POST /api/ingest  - Document ingestion
 * - GET  /api/health  - Health check
 */

require('dotenv').config();

const express = require('express');
const searchRouter = require('./lib/search-api');

const app = express();
const PORT = process.env.PORT || 3000;

// Middleware
app.use(express.json({ limit: '10mb' }));

// CORS for development
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
  if (req.method === 'OPTIONS') return res.sendStatus(200);
  next();
});

// API routes
app.use('/api', searchRouter);

// Root endpoint
app.get('/', (req, res) => {
  res.json({
    name: '{{projectName}}',
    description: 'Voyage AI RAG API',
    model: '{{model}}',
    database: '{{db}}',
    collection: '{{collection}}',
    endpoints: {
      search: 'POST /api/search',
      ingest: 'POST /api/ingest',
      health: 'GET /api/health',
    },
  });
});

// Error handler
app.use((err, req, res, next) => {
  console.error('Server error:', err);
  res.status(500).json({ error: 'Internal server error' });
});

app.listen(PORT, () => {
  console.log(`
🚀 Voyage AI RAG Server

   Model:      {{model}}
   Database:   {{db}}.{{collection}}
{{#if rerank}}
   Reranking:  {{rerankModel}}
{{/if}}

   Endpoints:
   POST /api/search  - Semantic search
   POST /api/ingest  - Document ingestion
   GET  /api/health  - Health check

   Running on http://localhost:${PORT}
`);
});

// Graceful shutdown
process.on('SIGTERM', async () => {
  console.log('Shutting down...');
  const { close } = require('./lib/connection');
  await close();
  process.exit(0);
});
