import { FC } from "react";
import { DropzoneProps, FileWithPath } from "@mantine/dropzone";
import ImageDropzone from "@/components/ui/ImageDropzone/ImageDropzone";
import { notifications } from "@/lib/notifications";
import BaseFormInputProps from "@/utils/baseFormInputProps";
import useImageDropzone from "./useImageDropzone";

interface RestProps {
    imageUrlInputProps?: BaseFormInputProps<string>;
    productId?: number;
}

type Props = Omit<DropzoneProps, "onDrop"> & RestProps;

const ProductImageDropzone: FC<Props> = ({
    imageUrlInputProps,
    productId,
}: Props) => {
    const imageDropzoneProps = useImageDropzone({
        imageUrlInputProps,
    });

    const onDrop = (files: FileWithPath[]) => {
        if (!productId || !imageUrlInputProps) return;
        if (files.length > 1) {
            notifications.error({ message: "Прикрепите одно изображение" });
            return;
        }
        const { setIsLoading, setShowDropzone } = imageDropzoneProps;
        const file = files[0];

        setIsLoading(true);

        // TODO SEND REQUEST

        // ProductService.uploadProductImage({
        //     productId,
        //     formData: {
        //         upload_file: file,
        //     },
        // })
        //     .then(({ ok, message, imageUrl }) => {
        //         notifications.guess(ok, { message });
        //         setIsLoading(false);
        //
        //         if (!ok || !imageUrl) {
        //             setShowDropzone(true);
        //             return;
        //         }
        //         imageUrlInputProps?.onChange(imageUrl);
        //         setShowDropzone(false);
        //     })
        //     .catch(error => {
        //         notifications.error({ message: error.toString() });
        //         setShowDropzone(true);
        //         setIsLoading(false);
        //     });
    };

    return (
        <ImageDropzone
            onDrop={onDrop}
            imageDropzone={imageDropzoneProps}
        />
    );
};

export default ProductImageDropzone;
