import { db } from "../db/db.controller.js";
import { forecastImport } from "../db/schema/forecastImports.schema.js";
import { orderImport } from "../db/schema/ordersImports.schema.js";
import { runProdApi } from "../utils/prodEndpoint.utils.js";
import { returnFunc } from "../utils/returnHelper.utils.js";

type PostData = {
	receivingPlantId: string;
	documentName: string;
	sender: string;
	customerId: string;
	invoiceAddressId?: string;
	positions: unknown[];
};
type Data = {
	type: "orders" | "forecast";
	endpoint: string;
	data: PostData;
};
export const postData = async (data: Data, user: any) => {
	const posting = await runProdApi(
		{
			method: "post",
			endpoint: data.endpoint,
			data: [data.data],
		},
		"Forecast post",
	);

	if (!posting?.success) {
		return returnFunc({
			success: false,
			level: "error",
			module: "dm",
			subModule: data.type === "orders" ? "orders" : "forecast",
			message:
				posting?.message ??
				`Error in posting the ${data.type === "orders" ? "orders" : "forecast"} data`,
			data: posting?.data ?? [],
			notify: false,
		});
	}

	if (posting.success) {
		if (data.type === "forecast") {
			await db.insert(forecastImport).values({
				receivingPlantId: data.data.receivingPlantId ?? "test1",
				documentName: data.data.documentName ?? "forecast-data-missing",
				sender: data.data.sender ?? "lst-user",
				customerId: data.data.customerId ?? "0",
				rawData: data ?? [],
				add_user: user.username ?? undefined,
				upd_user: user.username ?? undefined,
			});
		}

		if (data.type === "orders") {
			await db.insert(orderImport).values({
				receivingPlantId: data.data.receivingPlantId ?? "test1",
				documentName: data.data.documentName ?? "order-data-missing",
				sender: data.data.sender ?? "lst-user",
				customerId: data.data.customerId ?? "0",
				invoiceAddressId: data.data.invoiceAddressId ?? "0",
				rawData: data ?? [],
				add_user: user.username ?? undefined,
				upd_user: user.username ?? undefined,
			});
		}

		return returnFunc({
			success: true,
			level: "info",
			module: "dm",
			subModule: data.type === "orders" ? "orders" : "forecast",
			message: posting?.message ?? "",
			data: (data.data as any) ?? [],
			notify: false,
		});
	}
};
