import React, { useState, useRef } from "react"; import { Save } from "lucide-react"; import { useTranslation } from "react-i18next"; import { generateThirdPartyAuth, generateThirdPartyConfig, } from "@/config/codexProviderPresets"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; interface CodexQuickWizardModalProps { isOpen: boolean; onClose: () => void; onApply: ( auth: string, config: string, extras: { websiteUrl?: string; displayName?: string; }, ) => void; } /** * CodexQuickWizardModal - Codex quick configuration wizard * Helps users quickly generate auth.json and config.toml */ export const CodexQuickWizardModal: React.FC = ({ isOpen, onClose, onApply, }) => { const { t } = useTranslation(); const [templateApiKey, setTemplateApiKey] = useState(""); const [templateProviderName, setTemplateProviderName] = useState(""); const [templateBaseUrl, setTemplateBaseUrl] = useState(""); const [templateWebsiteUrl, setTemplateWebsiteUrl] = useState(""); const [templateModelName, setTemplateModelName] = useState("gpt-5-codex"); const [templateDisplayName, setTemplateDisplayName] = useState(""); const apiKeyInputRef = useRef(null); const baseUrlInputRef = useRef(null); const modelNameInputRef = useRef(null); const displayNameInputRef = useRef(null); const resetForm = () => { setTemplateApiKey(""); setTemplateProviderName(""); setTemplateBaseUrl(""); setTemplateWebsiteUrl(""); setTemplateModelName("gpt-5-codex"); setTemplateDisplayName(""); }; const handleClose = () => { resetForm(); onClose(); }; const applyTemplate = () => { const requiredInputs = [ displayNameInputRef.current, apiKeyInputRef.current, baseUrlInputRef.current, modelNameInputRef.current, ]; for (const input of requiredInputs) { if (input && !input.checkValidity()) { input.reportValidity(); input.focus(); return; } } const trimmedKey = templateApiKey.trim(); const trimmedBaseUrl = templateBaseUrl.trim(); const trimmedModel = templateModelName.trim(); const auth = generateThirdPartyAuth(trimmedKey); const config = generateThirdPartyConfig( templateProviderName || "custom", trimmedBaseUrl, trimmedModel, ); onApply(JSON.stringify(auth, null, 2), config, { websiteUrl: templateWebsiteUrl.trim(), displayName: templateDisplayName.trim(), }); resetForm(); onClose(); }; const handleInputKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter") { e.preventDefault(); e.stopPropagation(); applyTemplate(); } }; return ( !open && handleClose()}> {t("codexConfig.quickWizard")}

{t("codexConfig.wizardHint")}

{/* API Key */}
setTemplateApiKey(e.target.value)} onKeyDown={handleInputKeyDown} pattern=".*\S.*" title={t("common.enterValidValue")} placeholder={t("codexConfig.apiKeyPlaceholder")} required className="font-mono" />
{/* Display Name */}
setTemplateDisplayName(e.target.value)} onKeyDown={handleInputKeyDown} placeholder={t("codexConfig.supplierNamePlaceholder")} required pattern=".*\S.*" title={t("common.enterValidValue")} />

{t("codexConfig.supplierNameHint")}

{/* Provider Name */}
setTemplateProviderName(e.target.value)} onKeyDown={handleInputKeyDown} placeholder={t("codexConfig.supplierCodePlaceholder")} />

{t("codexConfig.supplierCodeHint")}

{/* Base URL */}
setTemplateBaseUrl(e.target.value)} onKeyDown={handleInputKeyDown} placeholder={t("codexConfig.apiUrlPlaceholder")} required className="font-mono" />
{/* Website URL */}
setTemplateWebsiteUrl(e.target.value)} onKeyDown={handleInputKeyDown} placeholder={t("codexConfig.websitePlaceholder")} />

{t("codexConfig.websiteHint")}

{/* Model Name */}
setTemplateModelName(e.target.value)} onKeyDown={handleInputKeyDown} pattern=".*\S.*" title={t("common.enterValidValue")} placeholder={t("codexConfig.modelNamePlaceholder")} required />
{/* Preview */} {(templateApiKey || templateProviderName || templateBaseUrl) && (

{t("codexConfig.configPreview")}

                    {JSON.stringify(
                      generateThirdPartyAuth(templateApiKey),
                      null,
                      2,
                    )}
                  
                    {templateProviderName && templateBaseUrl
                      ? generateThirdPartyConfig(
                          templateProviderName,
                          templateBaseUrl,
                          templateModelName,
                        )
                      : ""}
                  
)}
); };