import {createBottomTabNavigator} from '@react-navigation/bottom-tabs';
import React, {Fragment} from 'react';
import {useSelector} from 'react-redux';
import {NavigationIcon} from '../../components';
import {RootState} from '../../store/rootReducer';
import {ScreenType} from '../../types';
import MainStackScreen from '../main/MainStackScreen';

const Tabs = createBottomTabNavigator();

const NavigationBar: React.FC = () => {
  const {isOnboardedUser} = useSelector((state: RootState) => state.user);

  return (
    <Tabs.Navigator
      screenOptions={({route}) => ({
        tabBarIcon: ({focused}) => {
          switch (route.name) {
            case 'Home':
              return <NavigationIcon tab="Home" disabled={!focused} />;
            case 'Search':
              return <NavigationIcon tab="Search" disabled={!focused} />;
            case 'Upload':
              return <NavigationIcon tab="Upload" disabled={!focused} />;
            case 'Notifications':
              return <NavigationIcon tab="Notifications" disabled={!focused} />;
            case 'Profile':
              return <NavigationIcon tab="Profile" disabled={!focused} />;
            default:
              return <Fragment />;
          }
        },
      })}
      initialRouteName={isOnboardedUser ? 'Profile' : 'Search'}
      tabBarOptions={{
        showLabel: false,
        style: {
          backgroundColor: 'transparent',
          position: 'absolute',
          borderTopWidth: 0,
          left: 0,
          right: 0,
          bottom: '1%',
        },
      }}>
      <Tabs.Screen
        name="Notifications"
        component={MainStackScreen}
        initialParams={{screenType: ScreenType.Notifications}}
      />
      <Tabs.Screen
        name="Search"
        component={MainStackScreen}
        initialParams={{screenType: ScreenType.Search}}
      />
      <Tabs.Screen
        name="Profile"
        component={MainStackScreen}
        initialParams={{screenType: ScreenType.Profile}}
      />
    </Tabs.Navigator>
  );
};

export default NavigationBar;
