import { DoubleArrowRight } from "@icons/questionsPage/DoubleArrowRight";
import { DoubleTick } from "@icons/questionsPage/DoubleTick";
import { VectorQuestions } from "@icons/questionsPage/VectorQuestions";
import { DeleteIcon } from "@icons/questionsPage/deleteIcon";
import type { SxProps } from "@mui/material";
import {
    Box,
    IconButton,
    Tooltip,
    Typography,
    useMediaQuery,
    useTheme,
} from "@mui/material";
import {copyQuestion, deleteQuestion, updateOpenBranchingPanel, updateQuestion} from "@root/questions/actions";
import MiniButtonSetting from "@ui_kit/MiniButtonSetting";
import { CopyIcon } from "../../assets/icons/questionsPage/CopyIcon";
import Branching from "../../assets/icons/questionsPage/branching";
import Clue from "../../assets/icons/questionsPage/clue";
import { HideIcon } from "../../assets/icons/questionsPage/hideIcon";
import SettingIcon from "../../assets/icons/questionsPage/settingIcon";
import type { AnyTypedQuizQuestion } from "../../model/questionTypes/shared";
import { updateOpenedModalSettingsId } from "@root/questions/actions";
import { useCurrentQuiz } from "@root/quizes/hooks";
import {enqueueSnackbar} from "notistack";
import {useQuestionsStore} from "@root/questions/store";


interface Props {
    switchState: string;
    SSHC: (data: string) => void;
    question: AnyTypedQuizQuestion;
    sx?: SxProps;
}

export default function ButtonsOptions({
    SSHC,
    switchState,
    question,
}: Props) {
    const theme = useTheme();
    const isMobile = useMediaQuery(theme.breakpoints.down(790));
    const isWrappMiniButtonSetting = useMediaQuery(theme.breakpoints.down(920));
    const quiz = useCurrentQuiz();

const {openBranchingPanel} = useQuestionsStore.getState()
    const openedModal = () => {
        updateOpenedModalSettingsId(question.id)
    };

    const handleClickBranching = (_, value) => {
        const parentId = question.content.rule.parentId
        if (parentId.length === 0 ){
            return enqueueSnackbar("Вопрос не учавствует в ветвлении")
        }
        if (parentId ===  "root") {
            return enqueueSnackbar("У корня нет условий ветвления")
        }
        if (parentId.length !== 0) {
            setTimeout(() => updateOpenBranchingPanel(!value), 10)
            openedModal()
        }

    }

    const buttonSetting: {
        icon: JSX.Element;
        title: string;
        value: string;
        myFunc?: any;
    }[] = [
            {
                icon: (
                    <SettingIcon
                        color={
                            switchState === "setting" ? "#ffffff" : theme.palette.grey3.main
                        }
                    />
                ),
                title: "Настройки",
                value: "setting",
            },
            {
                icon: (
                    <Clue
                        color={switchState === "help" ? "#ffffff" : theme.palette.grey3.main}
                    />
                ),
                title: "Подсказка",
                value: "help",
            },
            {
                icon: (
                    <Branching
                        color={
                            switchState === "branching" ? "#ffffff" : theme.palette.grey3.main
                        }
                    />
                ),
                title: "Ветвление",
                value: "branching",
                myFunc: handleClickBranching(question.id, openBranchingPanel),
            },
        ];

    return (
        <Box
            sx={{
                display: "flex",
                alignItems: "center",
                justifyContent: "space-between",
                width: "100%",
                background: "#f2f3f7",
                height: isMobile ? "92px" : "70px",
            }}
        >
            <Box
                sx={{
                    padding: isMobile ? " 3px 12px 11px" : "20px",
                    display: "flex",
                    flexWrap: isMobile ? "wrap" : "nowrap",
                    gap: "6px",
                }}
            >
                {buttonSetting.map(({ icon, title, value, myFunc }) => (
                    <Box key={value}>
                        {value === "branching" ? (
                            <Tooltip
                                arrow
                                placement="right"
                                componentsProps={{
                                    tooltip: {
                                        sx: {
                                            background: "#fff",
                                            borderRadius: "6px",
                                            color: "#9A9AAF",
                                            boxShadow: "0px 8px 24px rgba(210, 208, 225, 0.4)",
                                            "& .MuiTooltip-arrow": {
                                                color: "#FFF",
                                            },
                                        },
                                    },
                                }}
                                title={
                                    <Box>
                                        <Typography
                                            sx={{
                                                color: "#4D4D4D",
                                                fontWeight: "bold",
                                                fontSize: "14px",
                                                marginBottom: "10px",
                                            }}
                                        >
                                            Будет показан при условии
                                        </Typography>
                                        <Typography sx={{ fontWeight: "bold", fontSize: "12px" }}>
                                            Название
                                        </Typography>
                                        <Typography
                                            sx={{
                                                fontWeight: "bold",
                                                fontSize: "12px",
                                                marginBottom: "10px",
                                            }}
                                        >
                                            Условие 1, Условие 2
                                        </Typography>
                                        <Typography sx={{ color: "#7E2AEA", fontSize: "12px" }}>
                                            Все условия обязательны
                                        </Typography>
                                    </Box>
                                }
                            >
                                <MiniButtonSetting
                                    key={title}
                                    onClick={() => {
                                        SSHC(value);
                                        myFunc();
                                    }}
                                    sx={{
                                        backgroundColor:
                                            switchState === value
                                                ? theme.palette.brightPurple.main
                                                : "transparent",
                                        color:
                                            switchState === value
                                                ? "#ffffff"
                                                : theme.palette.grey3.main,
                                        minWidth: isWrappMiniButtonSetting ? "30px" : "64px",
                                        height: "30px",
                                        "&:hover": {
                                            color: theme.palette.grey3.main,
                                            "& path": { stroke: theme.palette.grey3.main },
                                        },
                                    }}
                                >
                                    {icon}
                                    {isWrappMiniButtonSetting ? null : title}
                                </MiniButtonSetting>
                            </Tooltip>
                        ) : (
                            <>
                                <MiniButtonSetting
                                    key={title}
                                    onClick={() => {
                                        SSHC(value);
                                        myFunc();
                                    }}
                                    sx={{
                                        backgroundColor:
                                            switchState === value
                                                ? theme.palette.brightPurple.main
                                                : "transparent",
                                        color:
                                            switchState === value
                                                ? "#ffffff"
                                                : theme.palette.grey3.main,
                                        minWidth: isWrappMiniButtonSetting ? "30px" : "64px",
                                        height: "30px",
                                        "&:hover": {
                                            color: theme.palette.grey3.main,
                                            "& path": { stroke: theme.palette.grey3.main },
                                        },
                                    }}
                                >
                                    {icon}
                                    {isWrappMiniButtonSetting ? null : title}
                                </MiniButtonSetting>
                            </>
                        )}
                    </Box>
                ))}
                <>
                    <MiniButtonSetting
                        onClick={undefined} // TODO
                        sx={{
                            minWidth: "30px",
                            height: "30px",
                            backgroundColor: "#FEDFD0",
                        }}
                    >
                        <DoubleTick style={{ color: "#FC712F", fontSize: "9px" }} />
                    </MiniButtonSetting>
                    <MiniButtonSetting
                        onClick={undefined} // TODO
                        sx={{
                            minWidth: "30px",
                            height: "30px",
                            backgroundColor: "#FEDFD0",
                        }}
                    >
                        <DoubleArrowRight style={{ color: "#FC712F", fontSize: "9px" }} />
                    </MiniButtonSetting>
                    <MiniButtonSetting
                        onClick={undefined} // TODO
                        sx={{
                            minWidth: "30px",
                            height: "30px",
                            backgroundColor: "#FEDFD0",
                        }}
                    >
                        <VectorQuestions style={{ color: "#FC712F", fontSize: "9px" }} />
                    </MiniButtonSetting>
                </>
            </Box>
            <Box
                sx={{
                    padding: "20px",
                    display: "flex",
                    gap: "6px",
                }}
            >
                <IconButton sx={{ borderRadius: "6px", padding: "2px" }}>
                    <HideIcon style={{ color: "#4D4D4D" }} />
                </IconButton>
                <IconButton
                    sx={{ borderRadius: "6px", padding: "2px" }}
                    onClick={() => copyQuestion(question.id, question.quizId)}
                >
                    <CopyIcon color={"#4D4D4D"} />
                </IconButton>
                <IconButton
                    sx={{ borderRadius: "6px", padding: "2px" }}
                    onClick={() => { // TODO
                        // const removedId = question.id;
                        // if (question.deleteTimeoutId) {
                        //   clearTimeout(question.deleteTimeoutId);
                        // }

                        // removeQuestion(quizId, totalIndex);

                        // const newTimeoutId = window.setTimeout(() => {
                        //   removeQuestionForce(quizId, removedId);
                        // }, 5000);

                        // updateQuestionsList<QuizQuestionBase>(quizId, totalIndex, {
                        //   ...question,
                        //   deleteTimeoutId: newTimeoutId,
                        // });

                        deleteQuestion(question.id, quiz.id);
                    }}
                    data-cy="delete-question"
                >
                    <DeleteIcon color={"#4D4D4D"} />
                </IconButton>
            </Box>
        </Box>
    );
}
