import React, { useEffect, useRef, useState } from "react"; import Chart from "chart.js/auto"; // NOTE: Insert your real API key below (Alpha Vantage or Finnhub recommended) const API_KEY = "SE3RGXNO85QQTUKC"; export default function InvestProPremium() { const chartRef = useRef(null); const chartInstance = useRef(null); const [darkMode, setDarkMode] = useState(true); const [user, setUser] = useState(null); const [portfolio, setPortfolio] = useState([]); const [ftsePrice, setFtsePrice] = useState(null); const [selectedStock, setSelectedStock] = useState(null); const stocks = [ "HSBA.L", "BP.L", "AZN.L", "ULVR.L", "SHEL.L" ]; // ---------- LOGIN SYSTEM ---------- const handleLogin = (e) => { e.preventDefault(); const username = e.target.username.value; setUser(username); localStorage.setItem("investpro_user", username); }; useEffect(() => { const savedUser = localStorage.getItem("investpro_user"); const savedPortfolio = JSON.parse(localStorage.getItem("investpro_portfolio")) || []; if (savedUser) setUser(savedUser); setPortfolio(savedPortfolio); }, []); const addToPortfolio = (stock) => { const updated = [...portfolio, stock]; setPortfolio(updated); localStorage.setItem("investpro_portfolio", JSON.stringify(updated)); }; // ---------- FTSE 100 LIVE DATA ---------- useEffect(() => { async function fetchFTSE() { try { const res = await fetch( `https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=^FTSE&apikey=${API_KEY}` ); const data = await res.json(); if (data["Global Quote"]) { setFtsePrice(data["Global Quote"]["05. price"]); } } catch (err) { console.error("FTSE fetch error", err); } } fetchFTSE(); const interval = setInterval(fetchFTSE, 60000); return () => clearInterval(interval); }, []); // ---------- LIVE STOCK CHART ---------- useEffect(() => { if (!chartRef.current) return; chartInstance.current = new Chart(chartRef.current, { type: "line", data: { labels: [], datasets: [ { label: "Live Price", data: [], borderWidth: 2, tension: 0.4 } ] }, options: { responsive: true, animation: { duration: 500 } } }); const interval = setInterval(() => { const time = new Date().toLocaleTimeString(); const price = Math.random() * 100 + 7000; const chart = chartInstance.current; if (!chart) return; chart.data.labels.push(time); chart.data.datasets[0].data.push(price); if (chart.data.labels.length > 15) { chart.data.labels.shift(); chart.data.datasets[0].data.shift(); } chart.update(); }, 3000); return () => { clearInterval(interval); chartInstance.current?.destroy(); }; }, []); // ---------- PREMIUM UI STYLES ---------- const themeStyles = { background: darkMode ? "linear-gradient(135deg,#0f2027,#203a43,#2c5364)" : "linear-gradient(135deg,#eef2f3,#8e9eab)", color: darkMode ? "white" : "#111" }; if (!user) { return (
No holdings yet.
) : ( portfolio.map((p, i) =>