const DropZone = require("dropzone");

const template = `
    <div class="dropzone-container">
        <div class="dz-message">{{placeholder}}</div>
    </div>
`;

const props = ['placeholder', 'uploadUrl', 'uploadedTo'];

// TODO - Remove jQuery usage
function mounted() {
   let container = this.$el;
   let _this = this;
   new DropZone(container, {
        url: function() {
            return _this.uploadUrl;
        },
        init: function () {
            let dz = this;

            dz.on('sending', function (file, xhr, data) {
                let token = window.document.querySelector('meta[name=token]').getAttribute('content');
                data.append('_token', token);
                let uploadedTo = typeof _this.uploadedTo === 'undefined' ? 0 : _this.uploadedTo;
                data.append('uploaded_to', uploadedTo);
            });

            dz.on('success', function (file, data) {
                _this.$emit('success', {file, data});
                $(file.previewElement).fadeOut(400, function () {
                    dz.removeFile(file);
                });
            });

            dz.on('error', function (file, errorMessage, xhr) {
                _this.$emit('error', {file, errorMessage, xhr});
                console.log(errorMessage);
                console.log(xhr);
                function setMessage(message) {
                    $(file.previewElement).find('[data-dz-errormessage]').text(message);
                }

                if (xhr.status === 413) setMessage(trans('errors.server_upload_limit'));
                if (errorMessage.file) setMessage(errorMessage.file[0]);
            });
        }
   });
}

function data() {
    return {}
}

module.exports = {
    template,
    props,
    mounted,
    data,
};