"use server"; import { pool } from "@/lib/db"; import { getAdminUser } from "@/lib/admin-permissions"; import { getActiveBrandId } from "@/lib/brand-scope"; import { enqueueWholesaleWebhook } from "./webhooks"; import { getSession } from "@/lib/auth"; export async function recordWholesaleDeposit( orderId: string, amount: number, method: string = "cash", reference?: string, brandId?: string ): Promise<{ success: boolean; error?: string }> { await getSession(); const adminUser = await getAdminUser(); if (!adminUser) return { success: false, error: "Not authenticated" }; if (!adminUser.can_manage_orders) return { success: false, error: "Not authorized" }; const activeBrandId = await getActiveBrandId(adminUser, brandId); let data: { success?: boolean; error?: string } | null = null; try { const { rows } = await pool.query<{ success: boolean; error?: string }>( "SELECT * FROM record_wholesale_deposit($1, $2, $3, $4, $5, $6)", [orderId, amount, method, reference ?? null, adminUser.user_id, activeBrandId] ); data = Array.isArray(rows) ? rows[0] : rows; if (!data?.success) { return { success: false, error: data?.error ?? "Failed to record deposit" }; } } catch (e: unknown) { return { success: false, error: e instanceof Error ? e.message : "Failed to record deposit" }; } // Fire webhook — fire-and-forget enqueueWholesaleWebhook("deposit_recorded", orderId, { order_id: orderId, amount }, activeBrandId ?? undefined).catch(() => {}); return { success: true }; } export async function bulkFulfillWholesaleOrders( orderIds: string[] ): Promise<{ success: boolean; count?: number; error?: string }> { await getSession(); const adminUser = await getAdminUser(); if (!adminUser) return { success: false, error: "Not authenticated" }; if (!adminUser.can_manage_orders) return { success: false, error: "Not authorized" }; try { const { rows } = await pool.query<{ success: boolean; count?: number; error?: string }>( "SELECT * FROM bulk_fulfill_wholesale_orders($1, $2, $3)", [orderIds, adminUser.user_id, await getActiveBrandId(adminUser)] ); const data = Array.isArray(rows) ? rows[0] : rows; if (!data?.success) { return { success: false, error: data?.error ?? "Failed to bulk fulfill orders" }; } return { success: true, count: data.count }; } catch (e: unknown) { return { success: false, error: e instanceof Error ? e.message : "Failed to bulk fulfill orders" }; } } export async function bulkRecordWholesaleDeposit( orderIds: string[], amount: number, method: string = "cash", reference?: string ): Promise<{ success: boolean; count?: number; error?: string }> { await getSession(); const adminUser = await getAdminUser(); if (!adminUser) return { success: false, error: "Not authenticated" }; if (!adminUser.can_manage_orders) return { success: false, error: "Not authorized" }; try { const { rows } = await pool.query<{ success: boolean; count?: number; error?: string }>( "SELECT * FROM bulk_record_wholesale_deposit($1, $2, $3, $4, $5, $6)", [orderIds, amount, method, reference ?? null, adminUser.user_id, await getActiveBrandId(adminUser)] ); const data = Array.isArray(rows) ? rows[0] : rows; if (!data?.success) { return { success: false, error: data?.error ?? "Failed to bulk record deposits" }; } return { success: true, count: data.count }; } catch (e: unknown) { return { success: false, error: e instanceof Error ? e.message : "Failed to bulk record deposits" }; } }