import { logger } from '../server-utils/logger.js';
import query from '../server-utils/query.js';
import { ProjectContextV2, SessionContext } from './types.js';

const trackConductorRequest = async <T>(
  userId: string,
  request: string,
  context: ProjectContextV2,
  sessionContext: SessionContext,
  execute: () => T
): Promise<T> => {
  logger.info('Conductor request begins');

  const responseStart = Date.now();
  const response = await execute();
  const responseEnd = Date.now();

  query(
    `INSERT INTO conductor_requests (user_id, request, context, session_context, response, response_time_ms) VALUES ($1, $2, $3, $4, $5, $6)`,
    [
      userId,
      request,
      JSON.stringify(context),
      JSON.stringify(sessionContext),
      JSON.stringify(response),
      responseEnd - responseStart,
    ]
  ).catch((e) => console.error(e));

  logger.info('Conductor responded in', responseEnd - responseStart, 'ms.');

  return response;
};

export default trackConductorRequest;
