"use client";
import ChevronRightIcon from "@mui/icons-material/ChevronRight";
import MenuIcon from "@mui/icons-material/Menu";
import { Box, Drawer, IconButton, Stack, styled, Toolbar, Typography } from "@mui/material";
import MuiAppBar from "@mui/material/AppBar";
import { useState } from "react";
import HeaderMenu from "./HeaderMenu";
import moment from "jalali-moment";
import { headerMenu } from "@/core/utils/headerMenu";
import SidebarMenu from "./Sidebar/SidebarMenu";

const drawerWidth = 300;
const headersHeight = 136;

const Main = styled(Stack, { shouldForwardProp: (prop) => prop !== "open" })(({ theme, open }) => ({
    flexGrow: 1,
    height: "100%",
    transition: theme.transitions.create("margin", {
        easing: theme.transitions.easing.sharp,
        duration: theme.transitions.duration.leavingScreen,
    }),
    marginLeft: `-${drawerWidth}px`,
    ...(open && {
        transition: theme.transitions.create("margin", {
            easing: theme.transitions.easing.easeOut,
            duration: theme.transitions.duration.enteringScreen,
        }),
        marginLeft: 0,
    }),
}));

const AppBar = styled(MuiAppBar, {
    shouldForwardProp: (prop) => prop !== "open",
})(({ theme, open }) => ({
    transition: theme.transitions.create(["margin", "width"], {
        easing: theme.transitions.easing.sharp,
        duration: theme.transitions.duration.leavingScreen,
    }),
    ...(open && {
        width: `calc(100% - ${drawerWidth}px)`,
        marginLeft: `${drawerWidth}px`,
        transition: theme.transitions.create(["margin", "width"], {
            easing: theme.transitions.easing.easeOut,
            duration: theme.transitions.duration.enteringScreen,
        }),
    }),
}));

const DrawerHeader = styled("div")(({ theme }) => ({
    display: "flex",
    alignItems: "center",
    padding: theme.spacing(0, 1),
    ...theme.mixins.toolbar,
    minHeight: "40px !important",
    justifyContent: "flex-end",
}));

const HeaderWithSidebar = ({ children }) => {
    const [open, setOpen] = useState(true);
    const now = moment().locale("fa").format("YYYY/MM/DD");

    const handleDrawerOpen = () => {
        setOpen(true);
    };
    const handleDrawerClose = () => {
        setOpen(false);
    };
    return (
        <Box
            sx={{
                display: "flex",
                height: `calc(100% - ${headersHeight}px)`,
                width: "100%",
                mt: `${headersHeight}px`,
            }}
        >
            <AppBar sx={{ position: "fixed", top: "unset" }} elevation={0} open={open}>
                <Toolbar variant="dense" sx={{ minHeight: 40 }}>
                    <IconButton
                        color="inherit"
                        aria-label="open drawer"
                        onClick={handleDrawerOpen}
                        edge="start"
                        sx={{ mr: 2, ...(open && { display: "none" }) }}
                    >
                        <MenuIcon />
                    </IconButton>
                    <Box sx={{ flexGrow: 1, display: { xs: "none", md: "flex" } }}>
                        {headerMenu.map((menu) => (
                            <HeaderMenu key={menu.title} menu={menu} />
                        ))}
                    </Box>
                </Toolbar>
            </AppBar>
            <Drawer
                sx={{
                    height: "100%",
                    width: drawerWidth,
                    flexShrink: 0,
                    "& .MuiDrawer-paper": {
                        overflow: "hidden",
                        width: drawerWidth,
                        boxSizing: "border-box",
                        borderTop: 1,
                        borderTopColor: "divider",
                        position: "inherit",
                    },
                }}
                variant="persistent"
                anchor="left"
                open={open}
            >
                <DrawerHeader sx={{ display: "flex", alignItems: "center", justifyContent: "space-between" }}>
                    <Typography variant="subtitle2" color="#757575" sx={{ px: 1 }}>
                        تاریخ امروز: {now}
                    </Typography>
                    <IconButton onClick={handleDrawerClose}>
                        <ChevronRightIcon />
                    </IconButton>
                </DrawerHeader>
                <SidebarMenu />
                <Typography textAlign={"center"} variant="caption" sx={{ py: 0.2, fontFamily: "sans-serif" }}>
                    v{process.env.NEXT_PUBLIC_VERSION}
                </Typography>
            </Drawer>
            <Main open={open} sx={{ height: "100%", width: "100%", overflow: "hidden" }}>
                <DrawerHeader />
                <Box sx={{ height: "100%", width: "100%", overflowY: "auto", p: 1, overflowX: "hidden" }}>
                    {children}
                </Box>
            </Main>
        </Box>
    );
};
export default HeaderWithSidebar;
