import {
    Box,
    Tooltip,
    Typography,
    useMediaQuery,
    useTheme,
} from "@mui/material";
import { setQuestionInnerName, updateQuestion } from "@root/questions/actions";
import CustomCheckbox from "@ui_kit/CustomCheckbox";
import CustomTextField from "@ui_kit/CustomTextField";
import { useDebouncedCallback } from "use-debounce";
import InfoIcon from "../../../assets/icons/InfoIcon";
import type { QuizQuestionVariant } from "../../../model/questionTypes/variant";


interface Props {
    question: QuizQuestionVariant;
}

export default function ResponseSettings({ question }: Props) {
    const theme = useTheme();
    const isTablet = useMediaQuery(theme.breakpoints.down(900));

    const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
    const isMobile = useMediaQuery(theme.breakpoints.down(790));

    const updateQuestionInnerName = useDebouncedCallback((value) => {
        setQuestionInnerName(question.id, value);
    }, 200);

    return (
        <Box
            sx={{
                display: "flex",
                justifyContent: "space-between",
                flexDirection: isTablet ? "column" : "none",
                marginRight: isFigmaTablte ? (isMobile ? "0" : "0px") : "30px",
            }}
        >
            <Box
                sx={{
                    pt: isMobile ? "25px" : "20px",
                    pb: isMobile ? "25px" : "20px",
                    pl: "20px",
                    display: "flex",
                    flexDirection: "column",
                    gap: "14px",
                    width: "100%",
                }}
            >
                <Typography
                    sx={{
                        height: isMobile ? "18px" : "auto",
                        fontWeight: "500",
                        fontSize: "18px",
                        color: " #4D4D4D",
                    }}
                >
                    Настройки ответов
                </Typography>
                <CustomCheckbox
                    sx={{ mr: isMobile ? "0px" : "16px" }}
                    label={"Длинный текстовый ответ"}
                    checked={question.content.largeCheck}
                    handleChange={({ target }) => {
                        updateQuestion(question.id, question => {
                            if (!("largeCheck" in question.content)) return;

                            question.content.largeCheck = target.checked;
                        });
                    }}
                />
                <CustomCheckbox
                    sx={{ mr: isMobile ? "0px" : "16px" }}
                    label={"Можно несколько"}
                    checked={question.content.multi}
                    dataCy="multiple-answers-checkbox"
                    handleChange={({ target }) => {
                        updateQuestion(question.id, question => {
                            if (!("multi" in question.content)) return;

                            question.content.multi = target.checked;
                        });
                    }}
                />
                <CustomCheckbox
                    sx={{ mr: isMobile ? "0px" : "16px" }}
                    label={'Вариант "свой ответ"'}
                    checked={question.content.own}
                    handleChange={({ target }) => {
                        updateQuestion(question.id, question => {
                            if (!("own" in question.content)) return;

                            question.content.own = target.checked;
                        });
                    }}
                />
            </Box>
            <Box
                sx={{
                    boxSizing: "border-box",
                    pt: isMobile ? "0px" : "20px",
                    pb: "20px",
                    pl: isFigmaTablte ? (isTablet ? "20px" : "34px") : "28px",
                    pr: isFigmaTablte ? "19px" : "20px",
                    display: "flex",
                    flexDirection: "column",
                    gap: "14px",
                    width: "100%",
                }}
            >
                <Typography
                    sx={{
                        height: isMobile ? "18px" : "auto",
                        fontWeight: "500",
                        fontSize: "18px",
                        color: " #4D4D4D",
                    }}
                >
                    Настройки вопросов
                </Typography>
                <CustomCheckbox
                    sx={{ mr: isMobile ? "0px" : "16px" }}
                    label={"Необязательный вопрос"}
                    checked={!question.required}
                    handleChange={({ target }) => {
                        updateQuestion(question.id, question => {
                            question.required = !target.checked;
                        });
                    }}
                />
                <Box
                    sx={{
                        width: isMobile ? "90%" : "auto",
                        display: "flex",
                        alignItems: "center",
                    }}
                >
                    <CustomCheckbox
                        sx={{
                            mr: isMobile ? "0px" : "9px",
                            height: isMobile ? "42px" : "26px",
                            alignItems: "start",
                        }}
                        label={"Внутреннее название вопроса"}
                        checked={question.content.innerNameCheck}
                        handleChange={({ target }) => {
                            updateQuestion(question.id, question => {
                                question.content.innerNameCheck = target.checked;
                                question.content.innerName = target.checked ? question.content.innerName : "";
                            });
                        }}
                    />
                    {isMobile && (
                        <Tooltip
                            title="Будет отображаться как заголовок вопроса в приходящих заявках."
                            placement="top"
                        >
                            <Box>
                                <InfoIcon />
                            </Box>
                        </Tooltip>
                    )}
                </Box>
                {question.content.innerNameCheck && (
                    <CustomTextField
                        sx={{ mr: isMobile ? "0px" : "16px" }}
                        placeholder={"Развёрнутое описание вопроса"}
                        text={question.content.innerName}
                        onChange={({ target }) => updateQuestionInnerName(target.value)}
                    />
                )}
            </Box>
        </Box>
    );
}
