import axios from "axios";
import { labelData } from "../../../sqlServer/querys/materialHelpers/labelInfo.js";

import { query } from "../../../sqlServer/prodSqlServer.js";
import { createLog } from "../../../logger/logger.js";

import { prodEndpointCreation } from "../../../../globalUtils/createUrl.js";
import { tryCatch } from "../../../../globalUtils/tryCatch.js";
import { db } from "../../../../../database/dbclient.js";
import { commandLog } from "../../../../../database/schema/commandLog.js";

type Data = {
    runningNr: string;
    lotNum: number;
};
export const consumeMaterial = async (data: Data, prod: any) => {
    const { runningNr, lotNum } = data;
    // replace the rn

    const rnReplace = labelData.replaceAll("[rn]", runningNr);

    let barcode;
    // get the barcode from the running number
    try {
        const r: any = await query(rnReplace, "labelData");
        barcode = r?.data;
    } catch (error) {
        console.log(error);
        createLog(
            "error",
            prod.user.username,
            "logistics",
            `Error getting barcode: ${error}`
        );
    }

    if (barcode.length === 0) {
        return {
            success: false,
            message: "The running number you've entered not on stock.",
        };
        //throw Error("The provided runningNr is not in stock");
    }
    // create the url to post
    const url = await prodEndpointCreation(
        "/public/v1.0/IssueMaterial/ConsumeNonPreparedManualMaterial"
    );

    const consumeSomething = {
        productionLot: lotNum,
        barcode: barcode[0]?.barcode,
    };

    try {
        const results = await axios.post(url, consumeSomething, {
            headers: {
                "X-API-Key": process.env.TEC_API_KEY || "",
                "Content-Type": "application/json",
            },
        });
        //console.log(results);
        const { data: commandL, error: ce } = await tryCatch(
            db.insert(commandLog).values({
                commandUsed: "consumeMaterial",
                bodySent: data,
            })
        );
        return {
            success: true,
            message: "Material was consumed",
            status: results.status,
        };
    } catch (error: any) {
        return {
            success: false,
            status: 200,
            message: error.response?.data.errors[0].message,
        };
    }
};
