import PropTypes from "prop-types";
// @mui
import {
  Box,
  Card,
  colors,
  IconButton,
  Stack,
  Tooltip,
  Typography,
} from "@mui/material";
import { styled } from "@mui/material/styles";
// utils
// components
import IconFont from "@/components/IconFont";
import Label from "@/components/label";
import difftime from "@/utils/difftime";
import CheckIcon from "@mui/icons-material/Check";
import DeleteIcon from "@mui/icons-material/Delete";
import EditIcon from "@mui/icons-material/Edit";
import { history } from "@umijs/max";
import dayjs from "dayjs";
import { useState } from "react";

// ----------------------------------------------------------------------

const StyledProductImg = styled("img")({
  top: 0,
  width: "92%",
  height: "92%",
  marginTop: "4%",
  objectFit: "cover",
  position: "absolute",
});

// ----------------------------------------------------------------------

ShopProductCard.propTypes = {
  product: PropTypes.object,
};

export default function ShopProductCard({
  product,
  remove,
  edit,
  copy,
  publish,
  authorized,
}) {
  const { courseName, picUrl, createTime, typeName, type } = product;
  const [confirm, setconfirm] = useState(false);
  const [shut, setshut] = useState(false);

  return (
    <Card sx={{ borderRadius: 3 }} className="hovered" id="jikl">
      <Box sx={{ pt: "66%", position: "relative" }} className="center">
        {typeName && (
          <Label
            variant="filled"
            color={
              (type === 1 && "warning") || (type === 3 && "default") || "info"
            }
            sx={{
              zIndex: 9,
              top: 20,
              left: 20,

              position: "absolute",
              textTransform: "uppercase",
            }}
          >
            {typeName}
          </Label>
        )}
        <StyledProductImg
          alt={courseName}
          src={picUrl ?? DEFAULT_404_IMG}
          sx={{ borderRadius: 2 }}
        />

        <Box
          className="actionhover"
          sx={{ borderRadius: 2, overflow: "hidden" }}
        >
          <Box className="masker"></Box>
          {type == 1 && (
            <Box className="edit">
              <Tooltip title="编辑">
                <IconButton
                  onClick={() => {
                    edit(product);
                  }}
                >
                  <EditIcon
                    style={{ fontSize: 20, color: colors.blue[200] }}
                  ></EditIcon>
                </IconButton>
              </Tooltip>

              <Tooltip title={confirm ? "确认删除" : "删除"}>
                {confirm ? (
                  <IconButton
                    disabled={confirm === "1"}
                    onClick={() => {
                      remove(product);
                    }}
                    sx={{ marginLeft: 2 }}
                  >
                    <CheckIcon
                      style={{
                        fontSize: 20,
                        color:
                          confirm === "1"
                            ? colors.grey[500]
                            : colors.green[500],
                      }}
                    ></CheckIcon>
                  </IconButton>
                ) : (
                  <IconButton
                    onClick={() => {
                      setconfirm("1");

                      setTimeout(() => {
                        setconfirm(true);
                      }, 200);

                      setTimeout(() => {
                        setconfirm(false);
                      }, 3000);
                    }}
                  >
                    <DeleteIcon
                      style={{ fontSize: 20, color: colors.red[500] }}
                    ></DeleteIcon>
                  </IconButton>
                )}
              </Tooltip>
            </Box>
          )}

          <Stack
            direction="row"
            alignItems="center"
            justifyContent="space-between"
            width={"100%"}
            className="stackani"
            padding={"0px 12px"}
          >
            <div></div>

            {type !== 3 && (
              <Tooltip title={shut ? "确认关闭" : "关闭"}>
                {shut ? (
                  <IconButton
                    disabled={shut === "1"}
                    onClick={() => {
                      publish(product, { type: 3 });
                    }}
                  >
                    <CheckIcon
                      style={{
                        fontSize: 20,
                        color:
                          shut === "1" ? colors.grey[500] : colors.green[500],
                      }}
                    ></CheckIcon>
                  </IconButton>
                ) : (
                  <IconButton
                    onClick={() => {
                      setshut("1");

                      setTimeout(() => {
                        setshut(true);
                      }, 200);

                      setTimeout(() => {
                        setshut(false);
                      }, 3000);
                    }}
                  >
                    <IconFont
                      type="icon-guanbi"
                      style={{ fontSize: 20, color: "#ffffff" }}
                    ></IconFont>
                  </IconButton>
                )}
              </Tooltip>
            )}
          </Stack>
        </Box>
      </Box>

      <Stack spacing={2} sx={{ p: 2 }}>
        <Stack
          direction={"row"}
          justifyContent={"space-between"}
          width={"100%"}
          overflow={"hidden"}
          alignItems={"center"}
        >
          <Tooltip title={courseName}>
            <Typography variant="subtitle2" noWrap>
              {courseName}
            </Typography>
          </Tooltip>

          <Box width={60} textAlign={"right"} flexShrink={0}>
            <Tooltip title={createTime}>
              <Typography
                component="span"
                variant="body2"
                sx={{
                  color: "text.disabled",
                }}
              >
                {difftime(dayjs(), dayjs(createTime))}
              </Typography>
            </Tooltip>
          </Box>
        </Stack>
        <Stack
          direction={"row"}
          justifyContent={"space-between"}
          alignItems={"center"}
        >
          <Stack direction={"row"} spacing={1}>
            {type == 3 ? (
              <div></div>
            ) : (
              <Tooltip title={type == 1 ? "发布" : type == 2 ? "取消发布" : ""}>
                <IconButton
                  onClick={() => {
                    publish(product);
                  }}
                >
                  {type == 1 ? (
                    <IconFont
                      type="icon-fabu"
                      style={{ fontSize: 20, color: colors.blue[600] }}
                    ></IconFont>
                  ) : (
                    <IconFont
                      type="icon-undo"
                      style={{ fontSize: 20, color: colors.red[600] }}
                    ></IconFont>
                  )}
                </IconButton>
              </Tooltip>
            )}
            {type === 1 ? (
              <Tooltip title="授权">
                <IconButton
                  onClick={() => {
                    authorized(product);
                  }}
                >
                  <IconFont
                    type="icon-shouquanguanli"
                    style={{ fontSize: 20, color: colors.blue[600] }}
                  ></IconFont>
                </IconButton>
              </Tooltip>
            ) : (
              <div></div>
            )}
          </Stack>

          <Stack direction={"row"} spacing={1}>
            {type === 1 && (
              <Tooltip title="备课">
                <IconButton
                  onClick={() => {
                    history.push("/work/dolessons/" + product.id);
                  }}
                >
                  <IconFont
                    type="icon-beike"
                    style={{ fontSize: 20, color: "#333333" }}
                  ></IconFont>
                </IconButton>
              </Tooltip>
            )}

            <Tooltip title="复制创建">
              <IconButton
                onClick={() => {
                  copy(product);
                }}
              >
                <IconFont
                  type="icon-fuzhi"
                  style={{ fontSize: 20, color: "#333" }}
                ></IconFont>
              </IconButton>
            </Tooltip>
          </Stack>
        </Stack>
      </Stack>
    </Card>
  );
}
