import React, { useState } from 'react';
import { Card, Col, Row, Container } from 'react-bootstrap';
import Dropzone from "react-dropzone";
import BreadCrumb from '../../../Components/Common/BreadCrumb';

// Import React FilePond
import { FilePond,  registerPlugin } from 'react-filepond';
// Import FilePond styles
import 'filepond/dist/filepond.min.css';
import FilePondPluginImageExifOrientation from 'filepond-plugin-image-exif-orientation';
import FilePondPluginImagePreview from 'filepond-plugin-image-preview';
import 'filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css';
import { Head, Link } from '@inertiajs/react';
import Layout from '../../../Layouts';

// Register the plugins
registerPlugin(FilePondPluginImageExifOrientation, FilePondPluginImagePreview);

const FileUpload  = () => {
  const [selectedFiles, setselectedFiles] = useState<any>([]);
  const [files, setFiles] = useState<any>([]);

  function handleAcceptedFiles(files : any) {
    files.map((file: any) =>
      Object.assign(file, {
        preview: URL.createObjectURL(file),
        formattedSize: formatBytes(file.size),
      })
    );
    setselectedFiles(files);
  }
  /**
   * Formats the size
   */
  function formatBytes(bytes : any, decimals = 2) {
    if (bytes === 0) return "0 Bytes";
    const k = 1024;
    const dm = decimals < 0 ? 0 : decimals;
    const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];

    const i = Math.floor(Math.log(bytes) / Math.log(k));
    return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i];
  }
  
  return (
    <React.Fragment>
      <Head title='File Upload | Velzon - React Admin & Dashboard Template'/>
      <div className="page-content">
        <Container fluid>
          <BreadCrumb title="File Upload" pageTitle="Forms" />
          <Row>
            <Col lg={12}>
              <Card>
                <Card.Header >
                  <h4 className="card-title mb-0">Dropzone</h4>
                </Card.Header>
                <Card.Body>

                  <p className="text-muted">DropzoneJS is an open source library that provides drag’n’drop file uploads with image previews.</p>
                  <Dropzone
                    onDrop={(acceptedFiles : any) => {
                      handleAcceptedFiles(acceptedFiles);
                    }}
                  >
                    {({ getRootProps, getInputProps }) => (
                      <div className="dropzone dz-clickable">
                        <div
                          className="dz-message needsclick"
                          {...getRootProps()}
                        >
                          <div className="mb-3">
                            <i className="display-4 text-muted ri-upload-cloud-2-fill" />
                          </div>
                          <h4>Drop files here or click to upload.</h4>
                        </div>
                      </div>
                    )}
                  </Dropzone>
                  <div className="list-unstyled mb-0" id="file-previews">
                    {selectedFiles.map((f : any, i : any) => {
                      return (
                        <Card
                          className="mt-1 mb-0 shadow-none border dz-processing dz-image-preview dz-success dz-complete"
                          key={i + "-file"}
                        >
                          <div className="p-2">
                            <Row className="align-items-center">
                              <Col className="col-auto">
                                <img
                                  data-dz-thumbnail=""
                                  height="80"
                                  className="avatar-sm rounded bg-light"
                                  alt={f.name}
                                  src={f.preview}
                                />
                              </Col>
                              <Col>
                                <Link
                                  href="#"
                                  className="text-muted font-weight-bold"
                                >
                                  {f.name}
                                </Link>
                                <p className="mb-0">
                                  <strong>{f.formattedSize}</strong>
                                </p>
                              </Col>
                            </Row>
                          </div>
                        </Card>
                      );
                    })}
                  </div>
                </Card.Body>
              </Card>
            </Col>
          </Row>


          <Row className="mt-2">
            <Col lg={12}>
              <div className="justify-content-between d-flex align-items-center mb-3">
                <h5 className="mb-0 pb-1 text-decoration-underline">Filepond</h5>
              </div>

              <Row>
                <Col lg={6}>
                  <Card>
                    <Card.Header>
                      <h4 className="card-title mb-0">Multiple File Upload</h4>
                    </Card.Header>

                    <Card.Body>
                      <p className="text-muted">FilePond is a JavaScript library that
                        optimizes multiple images for faster uploads and offers a great, accessible, silky
                        smooth user experience.</p>
                      <FilePond
                        files={files}
                        onupdatefiles={setFiles}
                        allowMultiple={true}
                        maxFiles={3}
                        name="files"
                        className="filepond filepond-input-multiple"
                      />
                    </Card.Body>
                  </Card>
                </Col>
              </Row>
            </Col>
          </Row>
        </Container>
      </div>
    </React.Fragment>
  );
};
FileUpload.layout = (page:any) => <Layout children={page}/>
export default FileUpload;