import { ParsedWebhook, WebhookEntityType } from "./types";

function baseParse(
	req: any,
	entityType: WebhookEntityType,
	entityIdRaw: unknown
): ParsedWebhook {
	if (!req.body?.data) {
		return { ok: false, reason: "missing_body_data" };
	}
	const scope = String(req.headers?.type || "");
	const websiteId = parseInt(String(req.headers?.website_id ?? ""), 10);
	const entityId = parseInt(String(entityIdRaw ?? ""), 10);
	if (!Number.isFinite(websiteId) || !Number.isFinite(entityId)) {
		return { ok: false, reason: "invalid_website_or_entity_id" };
	}
	const payload = JSON.stringify({ data: req.body.data, headers: { type: scope } });
	const dedupeKey = `${websiteId}:${entityType}:${entityId}`;
	return {
		ok: true,
		dedupeKey,
		job: { websiteId, scope, entityType, entityId, payload },
	};
}

export function parseProductWebhookContext(req: any): ParsedWebhook {
	return baseParse(req, "product", req.body?.data?.id);
}

export function parseProductAssignmentWebhookContext(req: any): ParsedWebhook {
	return baseParse(req, "productAssignment", req.body?.data?.product_id);
}

export function parseCategoryWebhookContext(req: any): ParsedWebhook {
	return baseParse(req, "category", req.body?.data?.id);
}

export function parseOrderWebhookContext(req: any): ParsedWebhook {
	return baseParse(req, "order", req.body?.data?.id);
}
