// Global variables let trades = []; let currentMarketPrice = 0; let marketData = []; // Initialize the application document.addEventListener('DOMContentLoaded', function() { // Set default date to today const today = new Date().toISOString().split('T')[0]; document.getElementById('marketDate').value = today; // Add first trade addTrade(); // Set up event listeners document.getElementById('fetchDataBtn').addEventListener('click', fetchMarketData); document.getElementById('addTradeBtn').addEventListener('click', addTrade); // Price slider and input synchronization const priceSlider = document.getElementById('priceSlider'); const priceInput = document.getElementById('priceInput'); priceSlider.addEventListener('input', function() { currentMarketPrice = parseFloat(this.value); priceInput.value = currentMarketPrice.toFixed(2); updateAllCalculations(); }); priceInput.addEventListener('input', function() { currentMarketPrice = parseFloat(this.value) || 0; priceSlider.value = currentMarketPrice; updateAllCalculations(); }); }); // Fetch market data from API async function fetchMarketData() { const symbol = document.getElementById('stockSymbol').value.trim().toUpperCase() || 'RELIANCE'; const date = document.getElementById('marketDate').value; if (!date) { alert('Please select a date'); return; } // Show loading state const btn = document.getElementById('fetchDataBtn'); const originalText = btn.innerHTML; btn.innerHTML = ' Loading...'; btn.disabled = true; try { // Convert date to timestamps const startDate = new Date(date + 'T00:01:00'); const endDate = new Date(date + 'T23:58:00'); const startTime = startDate.getTime(); const endTime = endDate.getTime(); // Construct API URL const url = `http://localhost:5000/chart?ticker=${symbol}&date=${date}`; const response = await fetch(url); const data = await response.json(); if (data && data.length > 0) { marketData = data; // Process data - we'll use the times as-is (assuming they're in proper format) const processedData = marketData.map(item => ({ price: item.price, time: item.time })); // Update UI updateMarketInfo(processedData); document.getElementById('marketInfo').classList.remove('hidden'); // Set initial price if (processedData.length > 0) { currentMarketPrice = processedData[processedData.length - 1].price; document.getElementById('priceSlider').value = currentMarketPrice; document.getElementById('priceInput').value = currentMarketPrice.toFixed(2); updateAllCalculations(); } } else { alert('No data available for the selected date'); } } catch (error) { console.error('Error fetching market data:', error); alert('Failed to fetch market data. Please try again.'); } finally { // Reset button state btn.innerHTML = originalText; btn.disabled = false; feather.replace(); } } // Update market info display function updateMarketInfo(data) { const currentPrice = data[data.length - 1].price; const lastUpdated = data[data.length - 1].time; document.getElementById('currentPrice').textContent = `₹${currentPrice.toFixed(2)}`; document.getElementById('lastUpdated').textContent = lastUpdated; // Update slider range based on data const prices = data.map(d => d.price); const minPrice = Math.min(...prices) * 0.9; const maxPrice = Math.max(...prices) * 1.1; const slider = document.getElementById('priceSlider'); slider.min = minPrice; slider.max = maxPrice; } // Add a new trade function addTrade() { const tradeId = 'trade_' + Date.now(); const trade = { id: tradeId, type: 'BUY', quantity: 0, price: 0 }; trades.push(trade); renderTrade(trade); } // Render trade UI function renderTrade(trade) { const container = document.getElementById('tradesContainer'); const tradeElement = document.createElement('div'); tradeElement.id = trade.id; tradeElement.className = 'bg-gray-700 rounded-lg p-4 border border-gray-600'; tradeElement.innerHTML = `