import React, { useState } from 'react'; import { Save, Key, Shield, MessageCircle, Globe, Check, Cpu, Zap, Plus, Trash2, Edit3, X, BarChart4, Newspaper, Scale, PlusCircle, MinusCircle } from 'lucide-react'; import { ApiSettings, AiConfig } from '../types'; import { InputGroup, ToggleButton, SelectGroup } from '../components/CommonUI'; interface SettingsProps { settings: ApiSettings; onSave: (settings: ApiSettings) => void; } const Settings: React.FC = ({ settings, onSave }) => { const [formData, setFormData] = useState(settings); const [isSaved, setIsSaved] = useState(false); const [showAiModal, setShowAiModal] = useState(false); const [editingAi, setEditingAi] = useState | null>(null); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); onSave(formData); setIsSaved(true); setTimeout(() => setIsSaved(false), 3000); }; const toggleService = (field: keyof Pick) => { setFormData(prev => ({ ...prev, [field]: !prev[field] })); }; const handleAddAi = () => { setEditingAi({ id: 'ai_' + Date.now(), name: '', providerType: 'gemini', modelName: 'gemini-3-flash-preview', baseUrl: '' }); setShowAiModal(true); }; const handleSaveAi = () => { if (!editingAi?.name) return; const newConfigs = [...formData.aiConfigs]; const index = newConfigs.findIndex(c => c.id === editingAi.id); if (index > -1) { newConfigs[index] = editingAi as AiConfig; } else { newConfigs.push(editingAi as AiConfig); } setFormData({ ...formData, aiConfigs: newConfigs }); setShowAiModal(false); setEditingAi(null); }; const handleDeleteAi = (id: string) => { setFormData({ ...formData, aiConfigs: formData.aiConfigs.filter(c => c.id !== id) }); }; return (
{/* Left Column: API & AI */}
{/* KIS API Section Card */}

KIS API 커넥터 설정

안전한 증권사 연동 프로필

setFormData({...formData, appKey: v})} type="password" placeholder="App Key" /> setFormData({...formData, appSecret: v})} type="password" placeholder="Secret Key" />
setFormData({...formData, accountNumber: v})} placeholder="예: 50061234-01" />
{/* AI 분석 자동화 설정 Card */}

AI 분석 자동화 설정

분석 작업별 엔진 지정

} value={formData.preferredNewsAiId || ''} onChange={(v) => setFormData({...formData, preferredNewsAiId: v})} options={[{value: '', label: '선택 안 함'}, ...formData.aiConfigs.map(c => ({value: c.id, label: c.name}))]} /> } value={formData.preferredStockAiId || ''} onChange={(v) => setFormData({...formData, preferredStockAiId: v})} options={[{value: '', label: '선택 안 함'}, ...formData.aiConfigs.map(c => ({value: c.id, label: c.name}))]} /> } value={formData.preferredNewsJudgementAiId || ''} onChange={(v) => setFormData({...formData, preferredNewsJudgementAiId: v})} options={[{value: '', label: '선택 안 함'}, ...formData.aiConfigs.map(c => ({value: c.id, label: c.name}))]} /> } value={formData.preferredAutoBuyAiId || ''} onChange={(v) => setFormData({...formData, preferredAutoBuyAiId: v})} options={[{value: '', label: '선택 안 함'}, ...formData.aiConfigs.map(c => ({value: c.id, label: c.name}))]} />
} value={formData.preferredAutoSellAiId || ''} onChange={(v) => setFormData({...formData, preferredAutoSellAiId: v})} options={[{value: '', label: '선택 안 함'}, ...formData.aiConfigs.map(c => ({value: c.id, label: c.name}))]} />
{/* Right Column: Extensions & Notifications & AI Management */}
{/* AI Engine Management Card moved here */}

AI 엔진 프로필 관리

사용자 지정 AI 모델 목록

{formData.aiConfigs.length === 0 ? (

등록된 엔진이 없습니다

) : ( formData.aiConfigs.map(config => (
{config.name}

{config.providerType === 'gemini' ? 'Gemini Flash' : 'Ollama (OpenAI)'} • {config.modelName}

)) )}

텔레그램 알림 봇 연동

체결 알림 및 상태 보고

toggleService('useTelegram')} />
setFormData({...formData, telegramToken: v})} placeholder="Bot API Token" /> setFormData({...formData, telegramChatId: v})} placeholder="Chat ID" />

네이버 뉴스 스크랩 연동

실시간 금융 뉴스 분석

toggleService('useNaverNews')} />
setFormData({...formData, naverClientId: v})} placeholder="Naver Client ID" /> setFormData({...formData, naverClientSecret: v})} type="password" placeholder="Naver Client Secret" />

추가 확장 기능 준비 중

{/* Save Bar */}
로컬 보안 격리 저장 활성화됨
{/* AI Engine Modal */} {showAiModal && (

AI 엔진 프로필

setEditingAi({...editingAi, name: v})} placeholder="예: 구글 고성능 모델" />
setEditingAi({...editingAi, modelName: v})} placeholder="gemini-pros" />
)}
); }; export default Settings;