// SELECT count(*) FROM V_EtikettenGedruckt where AnzahlGedruckterKopien > 2 and CONVERT(varchar(5), Add_Date,108) not like CONVERT(varchar(5), Upd_Date,108) and Upd_Date > DATEADD(SECOND, -30,getdate()) and VpkVorschriftBez not like '%$%'

import { eq, sql } from "drizzle-orm";
import { db } from "../../../../../database/dbclient.js";
import { notifications } from "../../../../../database/schema/notifications.js";
import { tryCatch } from "../../../../globalUtils/tryCatch.js";
import { createLog } from "../../../logger/logger.js";
import { sendEmail } from "../sendMail.js";
import { query } from "../../../sqlServer/prodSqlServer.js";
import { downTimeCheck } from "../../../sqlServer/querys/notifications/downtimecheck.js";

export interface DownTime {
    downTimeId?: number;
    machineAlias?: string;
}
export default async function reprintLabelMonitor(notifyData: any) {
    // we will over ride this with users that want to sub to this
    // a new table will be called subalerts and link to the do a kinda linkn where the user wants it then it dose subId: 1, userID: x, notificationId: y. then in here we look up the userid to get the email :D
    // this could then leave the emails in the notificaion blank and let users sub to it.
    if (notifyData.emails === "") {
        createLog(
            "error",
            "notify",
            "notify",
            `There are no emails set for ${notifyData.name}`
        );

        return;
    }

    // console.log(data.secondarySetting[0].duration);
    let dQuery = downTimeCheck
        .replace("[dtDuration]", notifyData.notifiySettings?.duration)
        .replace("[daysInPast]", notifyData.notifiySettings?.daysInPast);
    //console.log(query);
    let downTime: any = []; //DownTime[];
    try {
        const res: any = await query(dQuery, "downTimeCheck");
        //console.log(labels.length);
        downTime = res.data;
        if (
            downTime.length > 0
            // && downTime[0]?.downTimeId > notifyData.notifiySettings.prodID
        ) {
            //send the email :D
            const emailSetup = {
                email: notifyData.emails,
                subject: `Alert! Downtime recorded greater than ${
                    notifyData.notifiySettings?.duration
                }min ${
                    downTime.length === 1
                        ? `on ${downTime[0].machineAlias}`
                        : ""
                }`,
                template: "downTimeCheck",
                context: {
                    items: downTime,
                    secondarySetting: notifyData.notifiySettings,
                },
            };

            const sentEmail = await sendEmail(emailSetup);

            if (!sentEmail.success) {
                createLog(
                    "error",
                    "notify",
                    "notify",
                    "Failed to send email, will try again on next interval"
                );
                return;
            }

            const { data, error } = await tryCatch(
                db
                    .update(notifications)
                    .set({
                        lastRan: sql`NOW()`,
                        notifiySettings: {
                            ...notifyData.notifiySettings,
                            prodID: downTime[0].downTimeId,
                        },
                    })
                    .where(eq(notifications.name, notifyData.name))
            );
        }
    } catch (err) {
        createLog(
            "error",
            "notify",
            "notify",
            `Error from running the downtimeCheck query: ${err}`
        );
    }
}
