import { NavigationContainer } from '@react-navigation/native'
import { createStackNavigator } from '@react-navigation/stack'
import { useCallback } from 'react'

import { NavigationProp } from '../../src/Navigation'
import { ScreenNames } from '../../src/constants/ScreenNames'

const StorybookStack = createStackNavigator()

export const StorybookNavigationContainer: React.FC<{
  screen: React.ReactElement
  withSomeNavigationHistory?: boolean
}> = ({ screen, withSomeNavigationHistory }) => {
  const renderScreen = useCallback(() => screen, [screen])

  return (
    <NavigationContainer
      independent
      initialState={
        withSomeNavigationHistory
          ? {
              index: 1,
              routes: [
                {
                  name: 'StorybookScreen',
                },
                {
                  name: 'StorybookScreen',
                },
              ],
            }
          : undefined
      }
    >
      <StorybookStack.Navigator>
        <StorybookStack.Screen
          name="StorybookScreen"
          component={renderScreen}
          options={{ header: () => null }}
        />
      </StorybookStack.Navigator>
    </NavigationContainer>
  )
}

export const mockNavigation = {
  goBack: () => {},
} as NavigationProp<ScreenNames>
