import { Router, Request } from 'express';
import pool from '../db';

const router = Router();

// GET /api/messages/search — full-text search
router.get('/search', async (req: Request, res) => {
  try {
    const q = req.query.q as string;
    const page = Math.max(1, parseInt(req.query.page as string) || 1);
    const limit = Math.min(50, parseInt(req.query.limit as string) || 20);
    const offset = (page - 1) * limit;
    const agent = req.query.agent as string;

    if (!q || q.trim().length < 2) {
      res.status(400).json({ error: 'Search query must be at least 2 characters' });
      return;
    }

    // Convert search query to tsquery format
    const tsQuery = q.trim().split(/\s+/).join(' & ');

    const conditions = [`to_tsvector('english', coalesce(m.content, '')) @@ to_tsquery('english', $1)`];
    const params: any[] = [tsQuery];
    let paramIdx = 2;

    if (agent) {
      conditions.push(`s.agent = $${paramIdx}`);
      params.push(agent);
      paramIdx++;
    }

    const whereClause = conditions.join(' AND ');

    const [countResult, results] = await Promise.all([
      pool.query(
        `SELECT COUNT(*) FROM crm_messages m JOIN crm_sessions s ON m.session_id = s.id WHERE ${whereClause}`,
        params
      ),
      pool.query(`
        SELECT m.id, m.role, m.content, m.content_type, m.timestamp, m.tool_name,
               s.agent, s.id as session_id,
               c.display_name, c.telegram_id,
               ts_headline('english', coalesce(m.content, ''), to_tsquery('english', $1),
                 'MaxWords=50, MinWords=20, StartSel=<mark>, StopSel=</mark>') as highlight
        FROM crm_messages m
        JOIN crm_sessions s ON m.session_id = s.id
        LEFT JOIN crm_contacts c ON m.contact_id = c.id
        WHERE ${whereClause}
        ORDER BY m.timestamp DESC
        LIMIT $${paramIdx} OFFSET $${paramIdx + 1}
      `, [...params, limit, offset]),
    ]);

    res.json({
      results: results.rows,
      total: parseInt(countResult.rows[0].count),
      page,
      limit,
      query: q,
    });
  } catch (err: any) {
    console.error('Search error:', err);
    res.status(500).json({ error: err.message });
  }
});

export default router;
