"use server"; import { supabase } from "@/lib/supabase"; export type AIAuthConfig = { provider: string; api_key: string; organization_id: string; base_url: string; model: string; max_tokens: number; }; export async function getAIPreferences(brandId: string): Promise<{ api_key?: string; organization_id?: string; base_url?: string; model?: string; max_tokens?: number; } | null> { const { data, error } = await supabase .from("brand_ai_settings") .select("api_key, organization_id, base_url, model, max_tokens") .eq("brand_id", brandId) .single(); if (error || !data) return null; return data; } export async function saveAIPreferences( brandId: string, config: AIAuthConfig ): Promise<{ success: boolean; error?: string }> { const result = await supabase .from("brand_ai_settings") .upsert({ brand_id: brandId, provider: config.provider, api_key: config.api_key || null, organization_id: config.organization_id || null, base_url: config.base_url || null, model: config.model || "gpt-4o-mini", max_tokens: config.max_tokens || 4000, updated_at: new Date().toISOString(), }) as { data: unknown; error: { message: string } | null }; if (result.error) return { success: false, error: result.error.message }; return { success: true }; } export async function testAIConnection(config: AIAuthConfig): Promise<{ ok: boolean; message: string }> { if (!config.api_key?.trim()) { return { ok: false, message: "API key is required" }; } try { const baseUrl = config.base_url?.trim() || "https://api.openai.com/v1"; const url = `${baseUrl.replace(/\/$/, "")}/models`; const response = await fetch(url, { headers: { Authorization: `Bearer ${config.api_key}`, }, }); if (response.ok) { return { ok: true, message: "Connection successful! Your API key is valid." }; } else if (response.status === 401) { return { ok: false, message: "Invalid API key. Please check and try again." }; } else { return { ok: false, message: `Error: ${response.status} ${response.statusText}` }; } } catch { return { ok: false, message: "Could not connect. Check your network and API key." }; } }