import { ReactElement, useContext } from 'react'
import { useNavigate } from 'react-router'
import Globe from 'remixicon-react/GlobalLineIcon'
import Search from 'remixicon-react/SearchLineIcon'
import Settings from 'remixicon-react/Settings2LineIcon'

import Card from '../../components/Card'
import { CheckState, Context as BeeContext } from '../../providers/Bee'
import { ROUTES } from '../../routes'

export default function NodeInfoCard(): ReactElement {
  const { status } = useContext(BeeContext)
  const navigate = useNavigate()

  if (status.all === CheckState.CONNECTING) {
    return (
      <Card
        buttonProps={{ iconType: Settings, children: 'Open node setup', onClick: () => navigate(ROUTES.STATUS) }}
        icon={<Globe />}
        title="Connecting..."
        subtitle="Attempting to establish connection to your Bee node."
        status={CheckState.CONNECTING}
      />
    )
  }

  if (status.all === CheckState.STARTING) {
    return (
      <Card
        buttonProps={{ iconType: Settings, children: 'Open node setup', onClick: () => navigate(ROUTES.STATUS) }}
        icon={<Globe />}
        title="Starting up..."
        subtitle="Your Bee node is currently launching."
        status={CheckState.STARTING}
      />
    )
  }

  if (status.all === CheckState.ERROR) {
    return (
      <Card
        buttonProps={{ iconType: Settings, children: 'Open node setup', onClick: () => navigate(ROUTES.STATUS) }}
        icon={<Globe />}
        title="Your node is not connected…"
        subtitle="You are not connected to Swarm."
        status={CheckState.ERROR}
      />
    )
  }

  if (status.all === CheckState.WARNING) {
    return (
      <Card
        buttonProps={{ iconType: Settings, children: 'Open node setup', onClick: () => navigate(ROUTES.STATUS) }}
        icon={<Globe />}
        title="Your node is running…"
        subtitle="Connection to Swarm might not be optimal."
        status={CheckState.WARNING}
      />
    )
  }

  return (
    <Card
      buttonProps={{ iconType: Search, children: 'Access Content', onClick: () => navigate(ROUTES.DOWNLOAD) }}
      icon={<Globe />}
      title="Your node is connected."
      subtitle="You are connected to Swarm."
      status={CheckState.OK}
    />
  )
}
