/* eslint-disable no-restricted-syntax */
import { NextRequest, NextResponse } from "next/server";
import { Client } from "@opensearch-project/opensearch";
import { v4 as uuid } from "uuid";
import taxonomy from "app/_config/taxonomy.json";
import unRegions from "app/_config/unRegions.json";

export const POST = async (req: NextRequest) => {
  const { tickets } = await req.json();
  const authorization = req.headers.get("authorization");
  const baseURL = `https://${process.env.OPENSEARCH_URL}`;
  const client = new Client({
    node: baseURL,
    ssl: {
      rejectUnauthorized: false,
    },
    headers: {
      authorization
    }
  });

  const succeeded = [];
  const failed = [];

  for await (const ticket of tickets) {
    const { id } = ticket;
    try {
      const country = ticket.country[0] ?? "none";
      // @ts-expect-error
      const translatedCountry = taxonomy.country[country]?.display ?? "none";
      const countryDetails: any = unRegions.find((c) => c.name === translatedCountry);
      const augmentedTicket = {
        ...ticket,
        region: countryDetails['sub-region']?.toLowerCase().replace(" ", "-") ?? null,
        continent: countryDetails.region?.toLowerCase().replace(" ", "-") ?? null,
      };
      const out = await client.create({
        id: uuid(),
        index: "sample_tagged_tickets",
        refresh: true,
        body: augmentedTicket,
      });
      console.log(out);
      succeeded.push(id);
    } catch (e) {
      console.log(e);
      failed.push(id);
    }
  }

  const results = { succeeded, failed };

  return NextResponse.json(results);
};

