import { observer } from "mobx-react";
import * as React from "react";
import { Link } from "react-router-dom";
import { Menu } from "semantic-ui-react";

import * as rp from "@app/routePaths";
import { AppState, ConsumeState, injectState } from "@app/state";

interface NavItemProps {
    to: string;
    children: React.ReactNode;
}

const NavItem = observer(({ to, children }: NavItemProps) => {
    function consumeState(appState: AppState) {
        const { location } = appState.routerStore;
        return (
            <Menu.Item as={Link} to={to} active={location.pathname.startsWith(to)}>{children}</Menu.Item>
        );
    }

    return (<ConsumeState>{consumeState}</ConsumeState>);
});

function NavBar({ appState }: { appState: AppState }) {
    let loginMenu;
    if (appState.isLoggedIn) {
        loginMenu = (
            <NavItem to={rp.logout}>Logout</NavItem>
        );
    } else {
        loginMenu = (
            <NavItem to={rp.login}>Login</NavItem>
        );
    }
    return (
        <Menu>
            <NavItem to={rp.device("grinklers")}>Device grinklers</NavItem>
            <NavItem to={rp.messagesTest}>Messages test</NavItem>
            <Menu.Menu position="right">
                {loginMenu}
            </Menu.Menu>
        </Menu>
    );
}

export default observer(injectState(NavBar));