"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { Select, SelectItem, Spacer } from "@nextui-org/react"; import { SaveIcon } from "lucide-react"; import { useState } from "react"; import { Controller, useForm } from "react-hook-form"; import * as z from "zod"; import { createLighthouseConfig, updateLighthouseConfig, } from "@/actions/lighthouse"; import { useToast } from "@/components/ui"; import { CustomButton, CustomInput, CustomTextarea, } from "@/components/ui/custom"; import { Form } from "@/components/ui/form"; const chatbotConfigSchema = z.object({ model: z.string().nonempty("Model selection is required"), apiKey: z.string().nonempty("API Key is required").optional(), businessContext: z .string() .max(1000, "Business context cannot exceed 1000 characters") .optional(), }); type FormValues = z.infer; interface ChatbotConfigClientProps { initialValues: FormValues; configExists: boolean; } export const ChatbotConfig = ({ initialValues, configExists: initialConfigExists, }: ChatbotConfigClientProps) => { const { toast } = useToast(); const [isLoading, setIsLoading] = useState(false); const [configExists, setConfigExists] = useState(initialConfigExists); const form = useForm({ resolver: zodResolver(chatbotConfigSchema), defaultValues: initialValues, mode: "onChange", }); const onSubmit = async (data: FormValues) => { if (isLoading) return; setIsLoading(true); try { const configData: any = { model: data.model, businessContext: data.businessContext || "", }; if (data.apiKey && !data.apiKey.includes("*")) { configData.apiKey = data.apiKey; } const result = configExists ? await updateLighthouseConfig(configData) : await createLighthouseConfig(configData); if (result) { setConfigExists(true); toast({ title: "Success", description: `Lighthouse configuration ${ configExists ? "updated" : "created" } successfully`, }); } else { throw new Error("Failed to save configuration"); } } catch (error) { toast({ title: "Error", description: "Failed to save lighthouse configuration: " + String(error), variant: "destructive", }); } finally { setIsLoading(false); } }; return (

Chatbot Settings

Configure your chatbot model and API settings.

( )} />
} > {isLoading ? "Saving..." : "Save"}
); };