import { NextRequest, NextResponse } from 'next/server';

import {
  NotificationAction,
  createNotificationLog,
} from '~/lib/services/audit/notificationEntries.service';

import loadEnv from '../handler/load-env';
import sendOpenJobsEmails from '../handler/send-open-jobs-emails';
import validateApiKey from '../handler/validate-api-key';

export const POST = async (request: NextRequest) => {
  loadEnv();

  try {
    validateApiKey(request);
  } catch (e) {
    return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' });
  }

  try {
    await sendOpenJobsEmails();
    console.info(
      'Successfully sent out open job notification emails to doctors.',
    );
    await createNotificationLog({
      action: NotificationAction.DOCTOR_NEW_JOBS,
      status: 'SUCCESS',
    });
    return NextResponse.json(
      {
        message:
          'Successfully sent out open job notification emails to doctors.',
      },
      { status: 200 },
    );
  } catch (e: any) {
    console.error(
      'Error sending out open job notification emails to doctors.',
      e,
    );
    await createNotificationLog({
      action: NotificationAction.DOCTOR_NEW_JOBS,
      status: 'FAIL',
      comment: e?.message,
    });
    return NextResponse.json(
      {
        message: 'Failed to send out open job notification emails to doctors.',
      },
      { status: 500 },
    );
  }
};
