import axios from "axios";

const connectWiseApi = axios.create({
  baseURL: `https://ttscw.totaltech.net/v4_6_release/apis/3.0/`,
  headers: {
    Authorization: `Basic ${process.env.CW_BASIC_TOKEN}`,
    clientId: `${process.env.CW_CLIENT_ID}`,
    "Content-Type": "application/json",
  },
});

async function main() {
  // Fetch inactive catalog items
  const pageSize = 1000;
  let page = 1;
  const inactiveItems: any[] = [];

  while (true) {
    const response = await connectWiseApi.get(
      `/procurement/catalog?page=${page}&pageSize=${pageSize}&conditions=inactiveFlag=true&fields=id,identifier,description,_info`,
    );
    if (response.data.length === 0) break;
    inactiveItems.push(...response.data);
    page++;
  }

  console.log(`Found ${inactiveItems.length} inactive catalog items`);
  console.log(`Checking inventory for each (batches of 50)...\n`);

  const withStock: any[] = [];
  const batchSize = 50;

  for (let i = 0; i < inactiveItems.length; i += batchSize) {
    const batch = inactiveItems.slice(i, i + batchSize);
    await Promise.all(
      batch.map(async (item) => {
        try {
          const res = await connectWiseApi.get(
            `/procurement/catalog/${item.id}/inventory?fields=onHand`,
          );
          const totalOnHand = (res.data as { onHand: number }[]).reduce(
            (sum, e) => sum + (e.onHand || 0),
            0,
          );
          if (totalOnHand > 0) {
            withStock.push({
              id: item.id,
              identifier: item.identifier,
              description: item.description,
              totalOnHand,
            });
          }
        } catch {}
      }),
    );
    const done = Math.min(i + batchSize, inactiveItems.length);
    if (done % 500 === 0 || done === inactiveItems.length) {
      console.log(`  ${done}/${inactiveItems.length} checked`);
    }
  }

  console.log(
    `\nInactive items with inventory: ${withStock.length}/${inactiveItems.length}\n`,
  );

  if (withStock.length > 0) {
    console.log(JSON.stringify(withStock, null, 2));
  }
}

main().catch(console.error);
