import { Snackbar } from "@mui/material";

import React, { PropsWithChildren } from "react";

type SnackbarContext = (message: string, duration?: number) => void;

const SnackbarContextK = React.createContext<SnackbarContext | null>(null);

export function SnackbarProvider(p: PropsWithChildren): React.ReactElement {
  const [open, setOpen] = React.useState(false);

  const [message, setMessage] = React.useState("");
  const [duration, setDuration] = React.useState(0);

  const handleClose = () => {
    setOpen(false);
  };

  const hook: SnackbarContext = (message, duration) => {
    setMessage(message);
    setDuration(duration ?? 6000);
    setOpen(true);
  };

  return (
    <>
      <SnackbarContextK value={hook}>
        {p.children}
      </SnackbarContextK>

      <Snackbar
        open={open}
        autoHideDuration={duration}
        onClose={handleClose}
        message={message}
      />
    </>
  );
}

export function useSnackbar(): SnackbarContext {
  return React.use(SnackbarContextK)!;
}