import { useState } from "react";
import {
  Box,
  Link,
  Typography,
  useTheme,
  useMediaQuery,
  InputAdornment,
  IconButton,
  Button,
  Popover,
  TextareaAutosize,
  TextField,
} from "@mui/material";
import { useParams } from "react-router-dom";

import { AnswerDraggableList } from "../AnswerDraggableList";
import { CropModal } from "@ui_kit/Modal/CropModal";
import { UploadImageModal } from "../UploadImage/UploadImageModal";

import AddImage from "@icons/questionsPage/addImage";
import Image from "@icons/questionsPage/image";
import { EnterIcon } from "../../../assets/icons/questionsPage/enterIcon";
import ButtonsOptionsAndPict from "../ButtonsOptionsAndPict";
import SwitchOptionsAndPict from "./switchOptionsAndPict";
import React from "react";
import { questionStore, updateQuestionsList } from "@root/questions";
import { ImageAddIcons } from "@icons/ImageAddIcons";
import { PointsIcon } from "@icons/questionsPage/PointsIcon";
import { MessageIcon } from "@icons/messagIcon";
import { DeleteIcon } from "@icons/questionsPage/deleteIcon";
import PlusImage from "@icons/questionsPage/plus";

import type { QuizQuestionVarImg } from "../../../model/questionTypes/varimg";

interface Props {
  totalIndex: number;
}

export default function OptionsAndPicture({ totalIndex }: Props) {
  const [open, setOpen] = useState(false);
  const [opened, setOpened] = useState<boolean>(false);
  const [switchState, setSwitchState] = useState("setting");
  const [currentIndex, setCurrentIndex] = useState<number>(0);
  const quizId = Number(useParams().quizId);
  const { listQuestions } = questionStore();
  const theme = useTheme();
  const isTablet = useMediaQuery(theme.breakpoints.down(1000));
  const isMobile = useMediaQuery(theme.breakpoints.down(790));
  const question = listQuestions[quizId][totalIndex] as QuizQuestionVarImg;

  const SSHC = (data: string) => {
    setSwitchState(data);
  };

  const uploadImage = (files: FileList | null) => {
    if (files?.length) {
      const [file] = Array.from(files);

      const clonedContent = { ...question.content };
      clonedContent.variants[currentIndex].extendedText =
        URL.createObjectURL(file);
      updateQuestionsList<QuizQuestionVarImg>(quizId, totalIndex, {
        content: clonedContent,
      });

      setOpen(false);
      setOpened(true);
    }
  };

  return (
    <>
      <Box sx={{ pl: "20px", pr: "20px" }}>
        <AnswerDraggableList
          variants={question.content.variants}
          totalIndex={totalIndex}
          additionalContent={(variant, index) => (
            <>
              {!isMobile && (
                <Box
                  sx={{ cursor: "pointer" }}
                  onClick={() => {
                    setCurrentIndex(index);
                    setOpen(true);
                  }}
                >
                  {variant.extendedText ? (
                    <Box
                      sx={{
                        overflow: "hidden",
                        width: "60px",
                        display: "flex",
                        alignItems: "center",
                        background: "#EEE4FC",
                        borderRadius: "3px",
                        margin: "0 10px",
                        height: "40px",
                      }}
                    >
                      <Box sx={{ display: "flex", width: "40px" }}>
                        <img
                          src={variant.extendedText}
                          alt=""
                          style={{ width: "100%" }}
                        />
                      </Box>
                      <PlusImage />
                    </Box>
                  ) : (
                    <Button component="label" sx={{ padding: "0px" }}>
                      <AddImage
                        sx={{
                          height: "40px",
                          width: "60px",
                          margin: "0 10px",
                        }}
                      />
                    </Button>
                  )}
                </Box>
              )}
            </>
          )}
          additionalMobile={(variant, index) => (
            <>
              {isMobile && (
                <Box
                  onClick={() => {
                    setCurrentIndex(index);
                    setOpen(true);
                  }}
                  sx={{
                    overflow: "hidden",
                    display: "flex",
                    alignItems: "center",
                    m: "8px",
                    position: "relative",
                    borderRadius: "3px",
                  }}
                >
                  <Box
                    sx={{
                      width: "100%",
                      background: "#EEE4FC",
                      height: "40px",
                      display: "flex",
                      alignItems: "center",
                      justifyContent: "center",
                    }}
                  >
                    {variant.extendedText ? (
                      <Box
                        sx={{
                          overflow: "hidden",
                          width: "40px",
                          display: "flex",
                          alignItems: "center",
                          background: "#EEE4FC",
                          height: "30px",
                          borderRadius: "3px",
                        }}
                      >
                        <img
                          src={variant.extendedText}
                          alt=""
                          style={{ width: "100%" }}
                        />
                      </Box>
                    ) : (
                      <Button component="label" sx={{ padding: "0px" }}>
                        <Image
                          sx={{
                            height: "40px",
                            width: "60px",
                            margin: "0 10px",
                          }}
                        />
                      </Button>
                    )}
                  </Box>
                  <Box
                    sx={{
                      display: "flex",
                      justifyContent: "center",
                      alignItems: "center",
                      width: "20px",
                      background: "#EEE4FC",
                      height: "40px",
                      color: "white",
                      backgroundColor: "#7E2AEA",
                    }}
                  >
                    +
                  </Box>
                </Box>
              )}
            </>
          )}
        />
        <UploadImageModal
          open={open}
          onClose={() => setOpen(false)}
          imgHC={uploadImage}
        />
        <CropModal
          opened={opened}
          onClose={() => setOpened(false)}
          picture={question.content.variants[currentIndex].extendedText}
        />
        <Box
          sx={{
            width: "100%",
            border: "1px solid #9A9AAF",
            borderRadius: "8px",
            display: isTablet ? "block" : "none",
          }}
        >
          <TextField
            fullWidth
            focused={false}
            placeholder={"Добавьте ответ"}
            multiline={question.content.largeCheck}
            InputProps={{
              startAdornment: (
                <>
                  <InputAdornment position="start">
                    <PointsIcon
                      style={{ color: "#9A9AAF", fontSize: "30px" }}
                    />
                  </InputAdornment>
                  {!isMobile && (
                    <Box
                      sx={{
                        width: "60px",
                        height: "40px",
                        background: "#EEE4FC",
                        display: "flex",
                        justifyContent: "space-between",
                        marginRight: "20px",
                        marginLeft: "12px",
                      }}
                    >
                      <Box
                        sx={{
                          display: "flex",
                          alignItems: "center",
                          justifyContent: "center",
                          width: "100%",
                        }}
                      >
                        <ImageAddIcons fontSize="22px" color="#7E2AEA" />
                      </Box>
                      <span
                        style={{
                          display: "flex",
                          alignItems: "center",
                          justifyContent: "center",
                          background: "#7E2AEA",
                          height: "100%",
                          width: "25px",
                          color: "white",
                          fontSize: "15px",
                        }}
                      >
                        +
                      </span>
                    </Box>
                  )}
                </>
              ),
              endAdornment: (
                <InputAdornment position="end">
                  <IconButton
                    sx={{ padding: "0" }}
                    aria-describedby="my-popover-id"
                  >
                    <MessageIcon
                      style={{
                        color: "#9A9AAF",
                        fontSize: "30px",
                        marginRight: "6.5px",
                      }}
                    />
                  </IconButton>
                  <Popover
                    id="my-popover-id"
                    anchorOrigin={{ vertical: "bottom", horizontal: "left" }}
                    open={false}
                  >
                    <TextareaAutosize
                      style={{ margin: "10px" }}
                      placeholder="Подсказка для этого ответа"
                    />
                  </Popover>
                  <IconButton sx={{ padding: "0" }}>
                    <DeleteIcon
                      style={{
                        color: theme.palette.grey2.main,
                        marginRight: "-1px",
                      }}
                    />
                  </IconButton>
                </InputAdornment>
              ),
            }}
            sx={{
              "& .MuiInputBase-root": {
                padding: "13.5px",
                borderRadius: "10px",
                background: "#ffffff",
                height: "48px",
              },
              "& .MuiOutlinedInput-notchedOutline": {
                border: "none",
              },
            }}
            inputProps={{
              sx: { fontSize: "18px", lineHeight: "21px", py: 0 },
            }}
          />

          {isMobile && (
            <Box
              sx={{
                display: "flex",
                alignItems: "center",
                m: "8px",
                position: "relative",
              }}
            >
              <Box
                sx={{ width: "100%", background: "#EEE4FC", height: "40px" }}
              />
              <ImageAddIcons
                style={{
                  position: "absolute",
                  color: "#7E2AEA",
                  fontSize: "20px",
                  left: "45%",
                  right: "55%",
                }}
              />
              <Box
                sx={{
                  display: "flex",
                  justifyContent: "center",
                  alignItems: "center",
                  width: "20px",
                  background: "#EEE4FC",
                  height: "40px",
                  color: "white",
                  backgroundColor: "#7E2AEA",
                }}
              >
                <Box
                  sx={{ width: "100%", background: "#EEE4FC", height: "40px" }}
                />
                <ImageAddIcons
                  style={{
                    position: "absolute",
                    color: "#7E2AEA",
                    fontSize: "20px",
                    left: "45%",
                    right: "55%",
                  }}
                />
                <Box
                  sx={{
                    display: "flex",
                    justifyContent: "center",
                    alignItems: "center",
                    width: "20px",
                    background: "#EEE4FC",
                    height: "40px",
                    color: "white",
                    backgroundColor: "#7E2AEA",
                  }}
                >
                  +
                </Box>
              </Box>
            </Box>
          )}
        </Box>
        <Box
          sx={{
            display: "flex",
            alignItems: "center",
            marginBottom: "17px",
          }}
        >
          <Link
            component="button"
            variant="body2"
            sx={{
              color: theme.palette.brightPurple.main,
              fontWeight: "400",
              fontSize: "16px",
              mr: "4px",
              height: "19px",
            }}
            onClick={() => {
              const clonedContent = { ...question.content };
              clonedContent.variants.push({
                answer: "",
                hints: "",
                extendedText: "",
              });
              updateQuestionsList<QuizQuestionVarImg>(quizId, totalIndex, {
                content: clonedContent,
              });
            }}
          >
            Добавьте ответ
          </Link>
          {isMobile ? null : (
            <>
              <Typography
                sx={{
                  fontWeight: 400,
                  lineHeight: "21.33px",
                  color: theme.palette.grey2.main,
                  fontSize: "16px",
                }}
              >
                или нажмите Enter
              </Typography>
              <EnterIcon
                style={{
                  color: "#7E2AEA",
                  fontSize: "24px",
                  marginLeft: "6px",
                }}
              />
            </>
          )}
        </Box>
      </Box>
      <ButtonsOptionsAndPict
        switchState={switchState}
        SSHC={SSHC}
        totalIndex={totalIndex}
      />
      <SwitchOptionsAndPict switchState={switchState} totalIndex={totalIndex} />
    </>
  );
}
