"use client" import type React from "react" import { useState, useEffect } from "react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { storeAPIKey, getAPIKey } from "@/utils/ai-service" interface APIKeyModalProps { open: boolean onOpenChange: (open: boolean) => void onKeySubmit: (provider: string) => void } export function APIKeyModal({ open, onOpenChange, onKeySubmit }: APIKeyModalProps) { const [apiKey, setApiKey] = useState("") const [provider, setProvider] = useState<"openai" | "gemini">("openai") const [isSubmitting, setIsSubmitting] = useState(false) const [error, setError] = useState(null) // Check if API key already exists when modal opens useEffect(() => { if (open) { const existingKey = getAPIKey() if (existingKey) { // If key exists, auto-submit and close modal onKeySubmit(provider) onOpenChange(false) } } }, [open, provider, onKeySubmit, onOpenChange]) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setIsSubmitting(true) setError(null) try { if (!apiKey.trim()) { throw new Error("API key is required") } // Simple validation based on provider if (provider === "openai" && !apiKey.trim().startsWith("sk-")) { throw new Error("Invalid OpenAI API key format. OpenAI keys typically start with 'sk-'") } // Store the API key with the selected provider storeAPIKey(provider, apiKey.trim()) // Call the onKeySubmit callback with the provider onKeySubmit(provider) // Close the modal onOpenChange(false) } catch (error) { setError(error instanceof Error ? error.message : "An unknown error occurred") } finally { setIsSubmitting(false) } } return ( AI API Key Required To use AI features, please enter your API key. This key will be stored securely in your browser for future use.
setProvider(value as "openai" | "gemini")}>
setApiKey(e.target.value)} placeholder={provider === "openai" ? "sk-..." : "Enter your Gemini API key"} className="bg-[#0a0e14] border-[#1e2a3a] focus-visible:ring-[#4cc9ff]" required /> {error &&

{error}

}

Your API key is stored locally in your browser and is never sent to our servers. You can get an API key from{" "} {provider === "openai" ? ( OpenAI's website ) : ( Google AI Studio )} .

) }