import dotenv from 'dotenv';
import { UpdateFAQData } from './conductor/updateFAQData.js';
import { getSample } from './controllers/samples.js';
import { handleQueue } from './external-services/redis.js';
import query from './server-utils/query.js';
import { WorkQueue } from './types/workQueue.js';
import { installPlatformEventHandlers } from './utils/platformEventHandling.js';

dotenv.config();

installPlatformEventHandlers();

await handleQueue(WorkQueue.SampleUpload, async (data) => {
  const { sampleId } = data;

  console.log(`Processing sample with ID ${sampleId}`);

  try {
    await getSample(
      { id: sampleId, bypassPermissionCheck: true },
      { returnLength: true, ensureWaveform: true, returnCompressed: true }
    );
  } catch (e) {
    console.error(e);
  }
});

await handleQueue(WorkQueue.UpdateFAQData, async () => {
  return await UpdateFAQData();
});

await handleQueue(WorkQueue.VoiceConversionTrainingProgress, async (data) => {
  const { trainingRunId, progress, state, s3Key, error } = data;
  await query(
    `
    UPDATE voice_conversion_model_training_runs
    SET (progress, state, s3_key, error) = (coalesce($2, progress), coalesce($3, state), coalesce($4, s3_key), coalesce($5, error))
    WHERE id = $1
    `,
    [trainingRunId, progress, state, s3Key, error]
  );
});
