import { executeRemoveBackgroundPOST } from "@/lib/canvas/operations/rmbg"; import { createLogger } from "@/lib/observability/logger"; const logger = createLogger("scene-fusion"); export async function preprocessProductImageWithRmbg(params: { request: Request; requestId: string; userId: string; productImageUrl: string; preRmbgEnabled: boolean; }): Promise<{ productImageUrl: string; usedPreRmbg: boolean; provider?: string; reason?: string }> { const { request, requestId, userId, productImageUrl, preRmbgEnabled } = params; if (!preRmbgEnabled) return { productImageUrl, usedPreRmbg: false, reason: "disabled_by_config" }; logger.info("pre_rmbg_started", { requestId }); try { const response = await executeRemoveBackgroundPOST(new Request(new URL("/api/rmbg", request.url), { method: "POST", headers: { "Content-Type": "application/json", "X-Request-ID": `${requestId}:pre-rmbg` }, body: JSON.stringify({ imageUrl: productImageUrl, prompt: "场景裂变预处理-抠图", skipGallerySave: true }), }), userId); const payload = await response.json(); if (!response.ok) { logger.warn("pre_rmbg_failed", { requestId, status: response.status, code: payload?.failure?.code }); return { productImageUrl, usedPreRmbg: false, reason: String(payload?.error || `request_failed_${response.status}`) }; } const cleanedUrl = String(payload?.original_url || payload?.thumbnail_url || "").trim(); if (!cleanedUrl || cleanedUrl === productImageUrl) { return { productImageUrl, usedPreRmbg: false, reason: cleanedUrl ? "same_as_source" : "empty_result" }; } return { productImageUrl: cleanedUrl, usedPreRmbg: true, provider: String(payload?.provider || "unknown") }; } catch (error) { logger.warn("pre_rmbg_failed", error, { requestId }); return { productImageUrl, usedPreRmbg: false, reason: error instanceof Error ? error.message : "exception" }; } }