import { NextResponse } from "next/server" import { fetchMutation } from "convex/nextjs" import { api } from "@/convex/_generated/api" import { requireGhlSyncAuth } from "@/app/api/internal/ghl/shared" import { fetchGhlMessages } from "@/lib/server/ghl-sync" export async function POST(request: Request) { const authError = await requireGhlSyncAuth(request) if (authError) { return authError } try { const body = await request.json().catch(() => ({})) const providedItems = Array.isArray(body.items) ? body.items : null const fetched = providedItems ? { items: providedItems, nextCursor: typeof body.nextCursor === "string" ? body.nextCursor : undefined, } : await fetchGhlMessages({ limit: typeof body.limit === "number" ? body.limit : undefined, cursor: body.cursor ? String(body.cursor) : undefined, channel: body.channel === "Call" ? "Call" : "SMS", }) let imported = 0 for (const item of fetched.items) { await fetchMutation(api.crm.importMessage, { provider: "ghl", entityId: String(item.id || ""), payload: item, }) imported += 1 } await fetchMutation(api.crm.updateSyncCheckpoint, { provider: "ghl", entityType: "messages", entityId: "messages", cursor: fetched.nextCursor, status: "synced", metadata: JSON.stringify({ imported, }), }) return NextResponse.json({ success: true, imported, nextCursor: fetched.nextCursor, }) } catch (error) { console.error("Failed to sync GHL messages:", error) return NextResponse.json( { error: "Failed to sync GHL messages" }, { status: 500 } ) } }