// import { parseFullSymbol } from './helpers.js';
// import { subPrices } from '@/blockchain/prices.js';

// const socket = io('wss://streamer.cryptocompare.com');
// const channelToSubscription = new Map();

// socket.on('connect', () => {
// 	console.log('[socket] Connected');
// });

// socket.on('disconnect', (reason) => {
// 	console.log('[socket] Disconnected:', reason);
// });

// socket.on('error', (error) => {
// 	console.log('[socket] Error:', error);
// });

// socket.on('m', data => {
// 	console.log('[socket] Message:', data);
// 	const [
// 		eventTypeStr,
// 		exchange,
// 		fromSymbol,
// 		toSymbol,
// 		,
// 		,
// 		tradeTimeStr,
// 		,
// 		tradePriceStr,
// 	] = data.split('~');

// 	if (parseInt(eventTypeStr) !== 0) {
// 		// Skip all non-trading events
// 		return;
// 	}
// 	const tradePrice = parseFloat(tradePriceStr);
// 	const tradeTime = parseInt(tradeTimeStr);
// 	const channelString = `0~${exchange}~${fromSymbol}~${toSymbol}`;
// 	const subscriptionItem = channelToSubscription.get(channelString);
// 	if (subscriptionItem === undefined) {
// 		return;
// 	}
// 	const lastDailyBar = subscriptionItem.lastDailyBar;
// 	const nextDailyBarTime = getNextDailyBarTime(lastDailyBar.time, subscriptionItem.resolution);

// 	console.log("tradeTime        ", tradeTime, new Date(tradeTime))
// 	console.log("lastDailyBar.time", lastDailyBar.time, new Date(lastDailyBar.time))
// 	console.log("nextDailyBarTime ", nextDailyBarTime, new Date(nextDailyBarTime))

// 	let bar;
// 	if (tradeTime >= nextDailyBarTime) {
// 		bar = {
// 			time: nextDailyBarTime,
// 			open: tradePrice,
// 			high: tradePrice,
// 			low: tradePrice,
// 			close: tradePrice,
// 		};
// 		console.log('[socket] Generate new bar', bar);
// 		console.log("time:", bar.time.toString(), new Date(bar.time).toUTCString())
// 	} else {
// 		bar = {
// 			...lastDailyBar,
// 			high: Math.max(lastDailyBar.high, tradePrice),
// 			low: Math.min(lastDailyBar.low, tradePrice),
// 			close: tradePrice,
// 		};
// 		console.log('[socket] Update the latest bar by price', tradePrice);
// 	}
// 	subscriptionItem.lastDailyBar = bar;

// 	// Send data to every subscriber of that symbol
// 	subscriptionItem.handlers.forEach(handler => handler.callback(bar));
// });

// function getNextDailyBarTime(barTime, res) {
// 	const date = new Date(barTime);
// 	const resDigits = res.slice(0, -1)
// 	if (res.endsWith("W")) {
// 		date.setDate(date.getDate() + parseInt(resDigits)*7);
// 	} else if (res.endsWith("D")) {
// 		date.setDate(date.getDate() + parseInt(resDigits));
// 	} else {
// 		date.setMinutes(date.getMinutes() + parseInt(res))
// 	}
// 	return date.getTime();
// }

// export function subscribeOnStream(
// 	symbolInfo,
// 	resolution,
// 	onRealtimeCallback,
// 	subscriberUID,
// 	onResetCacheNeededCallback,
// 	lastDailyBar,
// ) {
// 	// return;
// 	const parsedSymbol = parseFullSymbol(symbolInfo.full_name);
// 	const channelString = `0~${parsedSymbol.exchange}~${parsedSymbol.fromSymbol}~${parsedSymbol.toSymbol}`;
// 	const handler = {
// 		id: subscriberUID,
// 		callback: onRealtimeCallback,
// 	};
// 	let subscriptionItem = channelToSubscription.get(channelString);
// 	if (subscriptionItem) {
// 		// Already subscribed to the channel, use the existing subscription
// 		subscriptionItem.handlers.push(handler);
// 		return;
// 	}
// 	subscriptionItem = {
// 		subscriberUID,
// 		resolution,
// 		lastDailyBar,
// 		handlers: [handler],
// 	};
// 	channelToSubscription.set(channelString, subscriptionItem);
// 	console.log('[subscribeBars]: Subscribe to streaming. Channel:', channelString);
// 	socket.emit('SubAdd', { subs: [channelString] });
// }

// export function unsubscribeFromStream(subscriberUID) {
// 	// return;
// 	// Find a subscription with id === subscriberUID
// 	for (const channelString of channelToSubscription.keys()) {
// 		const subscriptionItem = channelToSubscription.get(channelString);
// 		const handlerIndex = subscriptionItem.handlers
// 			.findIndex(handler => handler.id === subscriberUID);

// 		if (handlerIndex !== -1) {
// 			// Remove from handlers
// 			subscriptionItem.handlers.splice(handlerIndex, 1);

// 			if (subscriptionItem.handlers.length === 0) {
// 				// Unsubscribe from the channel if it was the last handler
// 				console.log('[unsubscribeBars]: Unsubscribe from streaming. Channel:', channelString);
// 				socket.emit('SubRemove', { subs: [channelString] });
// 				channelToSubscription.delete(channelString);
// 				break;
// 			}
// 		}
// 	}
// }

// function sim() {
// 	// Assuming these variables hold the data you extracted earlier
// 	const eventTypeStr = "0";
// 	const exchange = "Uniswap";
// 	const fromSymbol = "WETH";
// 	const toSymbol = "USD";
// 	const tradeTimeStr = (Date.now()).toString();
// 	const tradePriceStr = (55+Date.now()%23).toString();

// 	// Constructing the original string
// 	const data = [
// 		eventTypeStr,
// 		exchange,
// 		fromSymbol,
// 		toSymbol,
// 		'', // Placeholder for the fifth element
// 		'', // Placeholder for the sixth element
// 		tradeTimeStr,
// 		'', // Placeholder for the eighth element
// 		tradePriceStr,
// 	].join('~');
// 	socket._callbacks['$m'][0](data);
// }

// window.sim = sim;
// socket._callbacks['$connect'][0]();
// setInterval(sim, 10*1000);
;
