import React, { useState, useEffect } from 'react'; import { BrainCircuit, Sparkles, RefreshCw, Search, TrendingUp, MessageSquareQuote, Zap, ChevronRight, Target, BarChart4, Cpu, ShieldCheck, AlertCircle } from 'lucide-react'; import { ApiSettings, StockItem, NewsItem, AiConfig } from '../types'; import { NaverService } from '../services/naverService'; import { AiService } from '../services/aiService'; interface AiInsightsProps { stocks: StockItem[]; settings: ApiSettings; onUpdateSettings: (settings: ApiSettings) => void; } const AiInsights: React.FC = ({ stocks, settings, onUpdateSettings }) => { // 뉴스 분석 상태 const [news, setNews] = useState([]); const [isNewsLoading, setIsNewsLoading] = useState(false); const [selectedNewsAiId, setSelectedNewsAiId] = useState(settings.preferredNewsAiId || settings.aiConfigs[0]?.id || 'none'); const [newsAnalysis, setNewsAnalysis] = useState(null); const [isNewsAnalyzing, setIsNewsAnalyzing] = useState(false); // 종목 분석 상태 const [search, setSearch] = useState(''); const [selectedStock, setSelectedStock] = useState(null); const [selectedStockAiId, setSelectedStockAiId] = useState(settings.preferredStockAiId || settings.aiConfigs[0]?.id || 'none'); const [stockAnalysis, setStockAnalysis] = useState(null); const [isStockAnalyzing, setIsStockAnalyzing] = useState(false); const naverService = new NaverService(settings); useEffect(() => { fetchInitialNews(); }, []); const fetchInitialNews = async () => { setIsNewsLoading(true); if (settings.useNaverNews) { const result = await naverService.fetchNews("주식 시장 전망"); setNews(result); } setIsNewsLoading(false); }; const handleNewsAnalysis = async () => { const config = settings.aiConfigs.find(c => c.id === selectedNewsAiId); if (!config) return; setIsNewsAnalyzing(true); const headlines = news.map(n => n.title); try { const result = await AiService.analyzeNewsSentiment(config, headlines); setNewsAnalysis(result); // 선호 엔진 업데이트 onUpdateSettings({ ...settings, preferredNewsAiId: selectedNewsAiId }); } catch (e) { setNewsAnalysis("분석 실패: API 설정을 확인해주세요."); } finally { setIsNewsAnalyzing(false); } }; const handleStockAnalysis = async () => { if (!selectedStock) return; const config = settings.aiConfigs.find(c => c.id === selectedStockAiId); if (!config) return; setIsStockAnalyzing(true); const context = `종목명: ${selectedStock.name}, 현재가: ${selectedStock.price}, 등락률: ${selectedStock.changePercent}%, PER: ${selectedStock.per}, PBR: ${selectedStock.pbr}, ROE: ${selectedStock.roe}%`; const prompt = `주식 전문가로서 다음 데이터를 바탕으로 ${selectedStock.name}에 대한 매수/매도 의견과 향후 일주일간의 대응 전략을 아주 구체적으로 제안해 주세요. 데이터: ${context}`; try { // AiService에 범용 호출 메서드가 없으므로 analyzeNewsSentiment를 차용하거나 직접 fetch 가능 // 여기서는 규칙에 따라 aiService의 call 메카니즘을 활용하도록 시뮬레이션 const result = await AiService.analyzeNewsSentiment(config, [prompt]); setStockAnalysis(result); onUpdateSettings({ ...settings, preferredStockAiId: selectedStockAiId }); } catch (e) { setStockAnalysis("분석 실패: API 연결을 확인하세요."); } finally { setIsStockAnalyzing(false); } }; const filteredStocks = stocks.filter(s => s.name.includes(search) || s.code.toLowerCase().includes(search.toLowerCase()) ).slice(0, 5); return (
{/* Header Banner */}

AI INTELLIGENCE CENTER

사용자가 직접 등록한 멀티 AI 엔진을 활용하여 시장의 거시적 흐름과
개별 종목의 미시적 데이터를 입체적으로 분석합니다.

Secure AI Tunneling
{settings.aiConfigs.length} Engines Connected
{/* News Intelligence Panel */}

MARKET SENTIMENT

실시간 뉴스 기반 시장 심리 분석

{newsAnalysis ? (
Analysis Result
{newsAnalysis}
) : (
{news.slice(0, 3).map((n, i) => (

{n.title}

))} {news.length === 0 && (

뉴스 데이터를 불러오는 중이거나
설정이 꺼져있습니다.

)}
)}
{/* Stock Deep Analysis Panel */}

STOCK DEEP DIVE

데이터 기반 종목 맞춤형 전략 수립

setSearch(e.target.value)} /> {search && filteredStocks.length > 0 && (
{filteredStocks.map(s => (
{ setSelectedStock(s); setSearch(''); setStockAnalysis(null); }} className="p-6 hover:bg-purple-50 cursor-pointer flex justify-between items-center border-b last:border-none border-slate-50 group" >
{s.code.substring(0,2)}

{s.name}

{s.code}

))}
)}
{selectedStock ? (

{selectedStock.name}

{selectedStock.code}

{stockAnalysis && (
{stockAnalysis}
)}
) : (

분석을 위해 상단에서 종목을 검색하세요

)}
); }; export default AiInsights;