import { useState, useEffect } from 'react';
import { io } from 'socket.io-client';

export interface MetricsUpdate {
  type: 'viewer_update' | 'purchase_update';
  liveViewers?: number;
  livePurchases?: number;
}

export const useLiveMetrics = (streamId: string) => {
  const [metrics, setMetrics] = useState({
    liveViewers: 0,
    livePurchases: 0,
    isConnected: false,
  });

  useEffect(() => {
    const socket = io(`${process.env.NEXT_PUBLIC_WS_URL || 'http://localhost:3000'}/live`, {
      query: { streamId },
      transports: ['websocket'],
    });

    socket.on('connect', () => setMetrics(prev => ({ ...prev, isConnected: true })));

    socket.on('metrics', (data: MetricsUpdate) => {
      switch (data.type) {
        case 'viewer_update':
          if (data.liveViewers !== undefined) setMetrics(prev => ({ ...prev, liveViewers: data.liveViewers! }));
          break;
        case 'purchase_update':
          if (data.livePurchases !== undefined) setMetrics(prev => ({ ...prev, livePurchases: data.livePurchases! }));
          break;
      }
    });

    return () => { socket.disconnect(); };
  }, [streamId]);

  return metrics;
};
