import axios from "axios";
import { labelData } from "../../../sqlServer/querys/materialHelpers/labelInfo.js";
import { laneInfo } from "../../../sqlServer/querys/materialHelpers/laneInfo.js";
import { query } from "../../../sqlServer/prodSqlServer.js";
import { createLog } from "../../../logger/logger.js";
import { tryCatch } from "../../../../globalUtils/tryCatch.js";
import { prodEndpointCreation } from "../../../../globalUtils/createUrl.js";
import { db } from "../../../../../database/dbclient.js";
import { commandLog } from "../../../../../database/schema/commandLog.js";
type Data = {
    runningNr: string;
    laneName: string;
};
export const returnMaterial = async (data: Data, prod: any) => {
    const { runningNr, laneName } = data;
    // replace the rn
    const rnReplace = labelData.replaceAll("[rn]", runningNr);

    // get the lane id by name
    const laneQuery = laneInfo.replaceAll("[laneName]", laneName);

    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}`
        );
    }

    const { data: l, error: laneError } = await tryCatch(
        query(laneQuery, "laneInfo")
    );
    const laneData: any = l?.data;
    if (laneError) {
        return {
            success: false,
            message:
                "The lane you entered is either deactivated or dose not exist.",
            laneError,
        };
    }

    if (!laneData) {
        return {
            success: false,
            message:
                "The lane you entered is either deactivated or dose not exist.",
        };
    }

    if (laneData.length === 0) {
        return {
            success: false,
            message:
                "The lane you entered is either deactivated or dose not exist.",
        };
    }

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

    const returnSomething = {
        laneId: laneData[0]?.laneID,
        barcode: barcode[0]?.barcode,
    };

    try {
        const results = await axios.post(url, returnSomething, {
            headers: {
                "Content-Type": "application/json",
                Authorization: `Basic ${prod.user.prod}`,
            },
        });
        //console.log(results);
        const { data: commandL, error: ce } = await tryCatch(
            db.insert(commandLog).values({
                commandUsed: "returnMaterial",
                bodySent: data,
            })
        );
        return {
            success: true,
            message: "Material was returned",
            status: results.status,
        };
    } catch (error: any) {
        return {
            success: false,
            status: 200,
            message: error.response?.data.errors[0].message,
        };
    }
};
