import { StackActions, CommonActions } from '@react-navigation/core'

let _navigator

function setTopLevelNavigator(navigatorRef) {
    _navigator = navigatorRef
}

function navigate(name, params) {
    if (_navigator) _navigator.dispatch(CommonActions.navigate(name, params))
}
function replace(name, params) {
    if (_navigator) _navigator.dispatch(StackActions.replace(name, params))
}
function push(name, params) {
    if (_navigator) _navigator.dispatch(StackActions.push(name, params))
}
function goBack() {
    if (_navigator) _navigator.dispatch(CommonActions.goBack())
}
function pop(count) {
    if (_navigator) _navigator.dispatch(StackActions.pop(count || 1))
}
function dismiss() {
    if (_navigator) {
        _navigator.dispatch(StackActions.popToTop())
        goBack()
    }
}
function navigateWithKey(name, params, key) {
    if (_navigator)
        _navigator.dispatch(CommonActions.navigate({ name, params, key }))
}
function reset(params) {
    if (_navigator) _navigator.dispatch(CommonActions.reset(params))
}

export default {
    dismiss,
    navigate,
    setTopLevelNavigator,
    goBack,
    push,
    replace,
    pop,
    navigateWithKey,
    reset,
}