import Env from "@ioc:Adonis/Core/Env";
import fs from "fs";
import moment from "moment/moment";
import dotenv from "dotenv";
import nodeMailer from "nodemailer";
dotenv.config();
export const sendDeviceInfora = async () => {
  try {
    //Regex check show inventory
    const regexInventory = /sh.*? inv.*/;
    //Regex check show version
    const regexVersion = /sh.*? ver.*/;
    const regexMemory = /(\d+)K/g;
    const date = moment(Date.now()).format("YYYYMMDD");
    const listInformation = [];
    let html = "";
    //List file today
    const listFile = fs
      .readdirSync(Env.get("FOLDER_LOGS"))
    //Configure mail
    const transporter = nodeMailer.createTransport({
      pool: true,
      host: "mail.ipsupply.com.au",
      port: 465,
      secure: true,
      auth: {
        user: "admin@apactech.io",
        pass: "BGK!dyt6upd2eax1bhz",
      },
    });
    //Read file in listFile
    await listFile.map((file) => {
      fs.readFile(Env.get("FOLDER_LOGS") + "/" + file, "utf8", (err, data) => {
        if (err) {
          console.log(`Error reading file: ${err}`);
        } else {
          //Array line
          const lines = data?.split("\n");
          const linesInventory = [];
          //Get index of "lines" with show inv
          lines?.map((line, index) => {
            if (line.match(regexInventory) !== null) {
              linesInventory.push(index);
            }
          });
          // console.log(linesInventory);
          //cut content with content1 = [linesInventory[index],linesInventory[index+1]] ...
          linesInventory?.map((line, index) => {
            const deviceContent = lines?.slice(
              linesInventory[index],
              linesInventory[index + 1]
            );
            let backgroundColor = "rgb(200 200 200 / 39%)"
            const showInventory = [];
            let check = true;
            let begin = 0;
            let end = 4;
            //get showInventory content
            while (check === true) {
              if (
                deviceContent
                  .slice(begin, end)
                  .filter(
                    (i) =>
                      i.includes("PID:") &&
                      i.includes("VID:") &&
                      i.includes("SN:")
                  ).length > 0
              ) {
                showInventory.push(deviceContent.slice(begin, end).join("\n"));
                begin = end;
                end = end + 4;
              } else {
                check = false;
              }
            }
            const showInventoryContent = showInventory
              .join("\n")
              .split("\n")
              .filter(
                (i) =>
                  i.includes("PID:") && i.includes("VID:") && i.includes("SN:")
              );
            //show version exists
            if (
              deviceContent.filter((line) => line.match(regexVersion) !== null)
                .length > 0
            ) {
              const lineShowver = deviceContent.indexOf(
                deviceContent.filter(
                  (line) => line.match(regexVersion) !== null
                )[0]
              );
              const showVersion = deviceContent.slice(
                lineShowver,
                deviceContent.indexOf(
                  deviceContent.filter(
                    (line) => line.search("Configuration register") !== -1
                  )[0]
                ) + 1
              );
              showInventoryContent.map((u, index) => {
                const PID = u
                  ?.split("VID:")[0]
                  ?.split("PID:")[1]
                  ?.replace(/,/g, "")
                  .trim();
                const VID = u
                  ?.split("VID:")[1]
                  ?.split("SN:")[0]
                  ?.replace(/,/g, "")
                  .trim();
                const SN = u?.split("SN:")[1]?.replace(/,/g, "").trim();
                //   let memory =
                if (index > 0) {
                  if (PID !== "" && SN !== "") {
                    // let RAM =
                    //   showVersion
                    //     .filter((line) => line.includes("bytes of memory"))
                    //     .join("
")
                    //     .match(regexMemory) !== null
                    //     ? (
                    //         parseInt(
                    //           showVersion
                    //             .filter((line) =>
                    //               line.includes("bytes of memory")
                    //             )
                    //             .join("
")
                    //             .match(regexMemory)[0]
                    //         ) /
                    //         1024 /
                    //         1024
                    //       ).toFixed(2) + "G"
                    //     : "";
                    // let flash = showVersion
                    //   .filter((line) =>
                    //     line.toLocaleLowerCase().includes("compactflash")
                    //   )
                    //   .join("
");
                    listInformation.push({
                      PID: PID,
                      VID: VID,
                      SN: SN,
                      RAM: "",
                      flash: "",
                      extraItem: "yes",
                    });
                    html += `
| PID | \VID | \SN | \RAM | \Flash | \Extra Item | \
|---|