import { Route, Routes, useParams } from 'react-router-dom';
import { Tabs } from 'src/components';
import Loader2 from 'src/components/ui/Loader2';
import useAdviserTexts from 'src/features/adviser/useAdviserTexts';
import useCybernetTexts from '../../useCybernetTexts';
import ActionBar from './SubnetActionBar/SubnetActionBar';
import SubnetHeader from './SubnetHeader/SubnetHeader';
import SubnetProvider, { useCurrentSubnet } from './subnet.context';
import SubnetInfo from './tabs/SubnetInfo/SubnetInfo';
import SubnetNeurons from './tabs/SubnetNeurons/SubnetNeurons';
import SubnetSubnets from './tabs/SubnetSubnets/SubnetSubnets';
import Weights from './tabs/Weights/Weights';

function Subnet() {
  const { ...rest } = useParams();
  const tab = rest['*'];

  // const {selectedContract} = useCybernet();

  const { subnetQuery, neuronsQuery, subnetRegistrationQuery, isRootSubnet } = useCurrentSubnet();

  const { getText } = useCybernetTexts();

  useAdviserTexts({
    isLoading: subnetQuery.loading,
    loadingText: `loading ${getText('subnetwork')}`,
    error: subnetQuery.error || neuronsQuery.error,
    // defaultText: 'subnet',
  });

  const addressRegisteredInSubnet = subnetRegistrationQuery.data !== null;

  const tabs = [
    {
      to: './info',
      key: 'info',
      text: 'info',
    },
    {
      to: './',
      key: 'delegates',
      text: getText(isRootSubnet ? 'rootValidator' : 'delegate', true),
    },

    {
      to: './grades',
      key: 'grades',
      text: 'grades',
      disabled: isRootSubnet,
    },
  ];

  if (isRootSubnet) {
    tabs.push({
      to: './faculties',
      key: 'faculties',
      text: getText('subnetwork', true),
    });
  }

  return (
    <>
      <SubnetHeader />

      <Tabs options={tabs} selected={tab || 'delegates'} />

      <Routes>
        <Route
          path="/"
          element={<SubnetNeurons addressRegisteredInSubnet={addressRegisteredInSubnet} />}
        />

        <Route path="/info" element={<SubnetInfo />} />

        {subnetQuery.data?.subnetwork_n > 0 && <Route path="/grades" element={<Weights />} />}

        <Route
          path="/faculties"
          element={<SubnetSubnets addressRegisteredInSubnet={addressRegisteredInSubnet} />}
        />
      </Routes>

      {subnetQuery.loading && <Loader2 />}

      <ActionBar />
    </>
  );
}

export default function SubnetWithProvider() {
  return (
    <SubnetProvider>
      <Subnet />
    </SubnetProvider>
  );
}

Neighbours