import type { GetServerSideProps } from 'next'
import OperatorOperationsPage from '@/components/explorer/OperatorOperationsPage'
import { fetchPublicJson } from '@/utils/publicExplorer'
import type { MissionControlBridgeStatusResponse } from '@/services/api/missionControl'
import type { InternalExecutionPlanResponse, PlannerCapabilitiesResponse } from '@/services/api/planner'
import type { RouteMatrixResponse } from '@/services/api/routes'

interface OperatorPageProps {
  initialBridgeStatus: MissionControlBridgeStatusResponse | null
  initialRouteMatrix: RouteMatrixResponse | null
  initialPlannerCapabilities: PlannerCapabilitiesResponse | null
  initialInternalPlan: InternalExecutionPlanResponse | null
}

export default function OperatorPage(props: OperatorPageProps) {
  return <OperatorOperationsPage {...props} />
}

export const getServerSideProps: GetServerSideProps<OperatorPageProps> = async () => {
  const [bridgeStatus, routeMatrix, plannerCapabilities] = await Promise.all([
    fetchPublicJson<MissionControlBridgeStatusResponse>('/explorer-api/v1/track1/bridge/status').catch(() => null),
    fetchPublicJson<RouteMatrixResponse>('/token-aggregation/api/v1/routes/matrix?includeNonLive=true').catch(() => null),
    fetchPublicJson<PlannerCapabilitiesResponse>('/token-aggregation/api/v2/providers/capabilities?chainId=138').catch(
      () => null,
    ),
  ])

  return {
    props: {
      initialBridgeStatus: bridgeStatus,
      initialRouteMatrix: routeMatrix,
      initialPlannerCapabilities: plannerCapabilities,
      initialInternalPlan: null,
    },
  }
}
