// Copyright (C) The Arvados Authors. All rights reserved.
//
// SPDX-License-Identifier: AGPL-3.0

import React from 'react';
import { InjectedFormProps, Field } from 'redux-form';
import { WithDialogProps } from 'store/dialog/with-dialog';
import { CollectionCreateFormDialogData } from 'store/collections/collection-create-actions';
import { FormDialog } from 'components/form-dialog/form-dialog';
import { require } from 'validators/require';
import { FileUploaderField } from 'views-components/file-uploader/file-uploader';
import { WarningCollection } from 'components/warning-collection/warning-collection';
import { fileUploaderActions } from 'store/file-uploader/file-uploader-actions';
import { progressIndicatorActions } from 'store/progress-indicator/progress-indicator-actions';

type DialogCollectionFilesUploadProps = WithDialogProps<{}> & InjectedFormProps<CollectionCreateFormDialogData>;

export const DialogCollectionFilesUpload = (props: DialogCollectionFilesUploadProps) => {

    return <FormDialog
        dialogTitle='Upload data'
        formFields={UploadCollectionFilesFields}
        submitLabel='Upload data'
        doNotDisableCancel
        cancelCallback={() => {
            const { submitting, dispatch } = (props as any);

            if (submitting) {
                dispatch(progressIndicatorActions.STOP_WORKING('uploadCollectionFilesDialog'));
                dispatch(fileUploaderActions.CANCEL_FILES_UPLOAD());
                dispatch(fileUploaderActions.CLEAR_UPLOAD());
            }
        }}
        {...props}
    />;
}

const UploadCollectionFilesFields = () => <>
    <Field
        name='files'
        validate={FILES_FIELD_VALIDATION}
        component={FileUploaderField} />
    <WarningCollection text="Uploading new files will change content address." />
</>;

const FILES_FIELD_VALIDATION = [require];