import { supabase } from "./supabase" export type AuditAction = | "user_deleted" | "user_updated" | "build_deleted" | "build_updated" | "component_deleted" | "component_updated" | "component_image_updated" | "bulk_delete_users" | "bulk_delete_builds" | "bulk_delete_components" | "price_updated" | "send_email" | "send_ticket_email" | "authorization_granted" | "authorization_revoked" export interface AuditLogEntry { id: number admin_user_id: number action: string target_type: string target_id: string | null target_name: string | null details: Record | null created_at: string admin_user?: { user_name: string; email: string } } export const auditLogService = { async log(params: { adminUserId: number action: AuditAction targetType: "user" | "build" | "component" | "email" | "account_authorization" targetId?: number | string targetName?: string details?: Record }) { const { data, error } = await supabase .from("audit_log") .insert({ admin_user_id: params.adminUserId, action: params.action, target_type: params.targetType, target_id: params.targetId != null ? String(params.targetId) : null, target_name: params.targetName ?? null, details: params.details ?? null, }) .select() .single() if (error) { console.error("Audit log insert error:", error) return null } return data }, async getRecent(limit = 100) { const { data, error } = await supabase .from("audit_log") .select( ` id, admin_user_id, action, target_type, target_id, target_name, details, created_at ` ) .order("created_at", { ascending: false }) .limit(limit) if (error) { console.error("Audit log fetch error:", error) return [] } const entries = (data ?? []) as Omit[] if (entries.length === 0) return [] const userIds = [...new Set(entries.map((e) => e.admin_user_id))] const { data: users } = await supabase .from("users") .select("user_id, user_name, email") .in("user_id", userIds) const userMap = new Map((users ?? []).map((u) => [u.user_id, { user_name: u.user_name, email: u.email }])) return entries.map((e) => ({ ...e, admin_user: userMap.get(e.admin_user_id), })) as AuditLogEntry[] }, }