/* eslint-disable @next/next/no-css-tags */
import React, { useState, useEffect, useContext, ReactElement } from 'react';
import { Skeleton, Card, Statistic, Row, Col } from 'antd';
import { formatDistanceToNow, formatRelative } from 'date-fns';
import dynamic from 'next/dynamic';
import { useTranslation } from 'next-export-i18n';
import { ServerStatusContext } from '../../utils/server-status-context';
import { LogTable } from '../../components/admin/LogTable';
import { Offline } from '../../components/admin/Offline';
import { StreamHealthOverview } from '../../components/admin/StreamHealthOverview';
import { LOGS_WARN, fetchData, FETCH_INTERVAL } from '../../utils/apis';
import { formatIPAddress, isEmptyObject } from '../../utils/format';
import { NewsFeed } from '../../components/admin/NewsFeed';
import { AdminLayout } from '../../components/layouts/AdminLayout';
// Lazy loaded components
const UserOutlined = dynamic(() => import('@ant-design/icons/UserOutlined'), {
  ssr: false,
});
const ClockCircleOutlined = dynamic(() => import('@ant-design/icons/ClockCircleOutlined'), {
  ssr: false,
});
function streamDetailsFormatter(streamDetails) {
  return (
    
      - 
        {streamDetails.videoCodec || 'Unknown'} @ {streamDetails.videoBitrate || 'Unknown'} kbps
      
- {streamDetails.framerate || 'Unknown'} fps
- 
        {streamDetails.width} x {streamDetails.height}
      
);
}
export default function Home() {
  const { t } = useTranslation();
  const serverStatusData = useContext(ServerStatusContext);
  const { broadcaster, serverConfig: configData } = serverStatusData || {};
  const { remoteAddr, streamDetails } = broadcaster || {};
  const encoder = streamDetails?.encoder || 'Unknown encoder';
  const [logsData, setLogs] = useState([]);
  const getLogs = async () => {
    try {
      const result = await fetchData(LOGS_WARN);
      setLogs(result);
    } catch (error) {
      console.log('==== error', error);
    }
  };
  const getMoreStats = () => {
    getLogs();
  };
  useEffect(() => {
    getMoreStats();
    let intervalId = null;
    intervalId = setInterval(getMoreStats, FETCH_INTERVAL);
    return () => {
      clearInterval(intervalId);
    };
  }, []);
  if (isEmptyObject(configData) || isEmptyObject(serverStatusData)) {
    return (
      <>
        
        
        
      >
    );
  }
  if (!broadcaster) {
    return ;
  }
  // map out settings
  const videoQualitySettings = serverStatusData?.currentBroadcast?.outputSettings?.map(setting => {
    const { audioPassthrough, videoPassthrough, audioBitrate, videoBitrate, framerate } = setting;
    const audioSetting = audioPassthrough
      ? `${streamDetails.audioCodec || 'Unknown'}, ${streamDetails.audioBitrate} kbps`
      : `${audioBitrate || 'Unknown'} kbps`;
    const videoSetting = videoPassthrough
      ? `${streamDetails.videoBitrate || 'Unknown'} kbps, ${streamDetails.framerate} fps ${
          streamDetails.width
        } x ${streamDetails.height}`
      : `${videoBitrate || 'Unknown'} kbps, ${framerate} fps`;
    return (
        
        
      
    );
  });
  // inbound
  const { viewerCount, sessionPeakViewerCount } = serverStatusData;
  const streamAudioDetailString = `${streamDetails.audioCodec}, ${
    streamDetails.audioBitrate || 'Unknown'
  } kbps`;
  const broadcastDate = new Date(broadcaster.time);
  return (
    
      
        
          
            
              
                }
                />
              
              
                } />
              
              
                }
                />
              
            
            
          
        
        
          
            
              {videoQualitySettings}
            
            
              
              
              
            
          
          
            
          
        
       
      
      
     
  );
}
Home.getLayout = function getLayout(page: ReactElement) {
  return ;
};