import { JoDetail } from "@/app/api/jo";
import { Box, Button, Stack, Typography } from "@mui/material";
import { useMemo } from "react";
import { useFormContext } from "react-hook-form";
import { useTranslation } from "react-i18next";
import StartIcon from "@mui/icons-material/Start";
import PlayCircleFilledWhiteIcon from '@mui/icons-material/PlayCircleFilledWhite';

type Props = {
    handleRelease: () => void;
    handleStart: () => void;
};

interface ErrorEntry {
    qtyErr: boolean;
    scanErr: boolean;
}

const ActionButtons: React.FC<Props> = ({
    handleRelease,
    handleStart
}) => {
    const { t } = useTranslation("jo");

    const { watch } = useFormContext<JoDetail>();

    const status = useMemo(() => {
        return watch("status").toLowerCase()
    }, [watch("status")])

    const pickLines = useMemo(() => {
        return watch("pickLines")
    }, [watch("pickLines")])

    // Check Error Handling (e.g. start jo)
    const errors: ErrorEntry = useMemo(() => {
        let qtyErr = false;
        let scanErr = false;

        pickLines.forEach((line) => {
            if (!qtyErr) {
                const pickedQty = line.pickedLotNo?.reduce((acc, cur) => acc + cur.qty, 0) ?? 0
                qtyErr = pickedQty > 0 && pickedQty >= line.reqQty
            }

            if (!scanErr) {
                scanErr = line.pickedLotNo?.some((lotNo) => Boolean(lotNo.isScanned) === false) ?? false // default false
            }
        })

        return {
            qtyErr: qtyErr,
            scanErr: scanErr
        }
    }, [pickLines])

    return (
        <Stack direction="row" justifyContent="flex-start" gap={1}>
            {status === "planning" && (
                <Button
                    variant="outlined"
                    startIcon={<StartIcon />}
                    onClick={handleRelease}
                >
                    {t("Release")}
                </Button>
            )}
            {status === "pending" && (
                <Box sx={{ flexDirection: 'column'}}>
                    <Button
                        variant="outlined"
                        startIcon={<PlayCircleFilledWhiteIcon />}
                        onClick={handleStart}
                        disabled={errors.qtyErr || errors.scanErr}
                    >
                        {t("Start Job Order")}
                    </Button>
                    {errors.scanErr && (<Typography variant="h3" color="error">{t("Please scan the item qr code.")}</Typography>)}
                    {errors.qtyErr && (<Typography variant="h3" color="error">{t("Please make sure the qty is enough.")}</Typography>)}
                </Box>
            )}
        </Stack>
    )
}

export default ActionButtons;