import React, { useState } from 'react'
import { Box, Button, Menu, MenuItem } from '@mui/material'
import { useNavigate, useParams } from "react-router-dom"
import authManager from '../AuthManager'

export default function Header() {
  const navigate = useNavigate()
  const [anchorEl, setAnchorEl] = useState(null)
  const handleClick = (event) => setAnchorEl(event.currentTarget)
  const handleClose = () => setAnchorEl(null)
  const params = useParams()

  const goToAccountSelection = () => navigate(`/account`)
  const goToContacts = () => navigate(`/Contacts`)
  const goToAccountSettings = () => navigate(`/account/${params.accountId}/settings`)

  return (
    <Box>
      <Button aria-controls="simple-menu" aria-haspopup="true" onClick={handleClick}>
        Menu
      </Button>
      <Menu
        id="simple-menu"
        anchorEl={anchorEl}
        open={Boolean(anchorEl)}
        onClose={handleClose}
      >
        <MenuItem onClick={goToAccountSelection}>Change account</MenuItem>
        <MenuItem onClick={goToContacts}>Contacts</MenuItem>
        {params.accountId && <MenuItem onClick={goToAccountSettings}>Account settings</MenuItem>}
        <MenuItem onClick={() => authManager.disconnect()}>Log out</MenuItem>
      </Menu>
      </Box>
  )
}