import { eq } from "drizzle-orm";
import { db } from "../../../../database/dbclient.js";
import { settings } from "../../../../database/schema/settings.js";
import { tryCatch } from "../../../globalUtils/tryCatch.js";
import { query } from "../../sqlServer/prodSqlServer.js";
import { openOrders } from "../../sqlServer/querys/dataMart/openOrders.js";
import { serverSettings } from "../../server/controller/settings/getSettings.js";

export const getOpenOrders = async (data: any | null) => {
    // const { data: plantToken, error: plantError } = await tryCatch(
    //     db.select().from(settings).where(eq(settings.name, "plantToken"))
    // );
    // if (plantError) {
    //     return {
    //         success: false,
    //         message: "Error getting Settings",
    //         data: plantError,
    //     };
    // }

    const plantToken = serverSettings.filter((n) => n.name === "plantToken");
    let orders: any = [];

    let updatedQuery = openOrders;

    // start days can be sent over
    if (data?.sDay) {
        updatedQuery = updatedQuery.replaceAll("[sDay]", data.sDay[0]);
    } else {
        updatedQuery = updatedQuery.replaceAll("[sDay]", "15");
    }

    // end days can be sent over
    if (data?.eDay) {
        updatedQuery = updatedQuery.replaceAll("[eDay]", data.eDay[0]);
    } else {
        updatedQuery = updatedQuery.replaceAll("[eDay]", "5");
    }

    try {
        orders = await query(updatedQuery, "Get active openorders");
    } catch (error) {
        return {
            success: false,
            message: "Errot getting current open orders",
            data: [],
        };
    }

    // add plant token in
    const pOrders = orders.data.map((item: any) => {
        // const dateCon = new Date(item.loadingDate).toLocaleString("en-US", {
        //     month: "numeric",
        //     day: "numeric",
        //     year: "numeric",
        //     hour: "2-digit",
        //     minute: "2-digit",
        //     hour12: false,
        // });

        //const dateCon = new Date(item.loadingDate).toISOString().replace("T", " ").split(".")[0];
        const dateCon = new Date(item.loadingDate).toISOString().split("T")[0];
        //const delDate = new Date(item.deliveryDate).toISOString().replace("T", " ").split(".")[0];
        const delDate = new Date(item.deliveryDate).toISOString().split("T")[0];
        return {
            plantToken: plantToken[0].value,
            ...item,
            loadingDate: dateCon,
            deliveryDate: delDate,
        };
    });
    return { success: true, message: "Current open orders", data: pOrders };
};
