import accounting from 'accounting';
import {ref} from 'vue';

accounting.settings.currency = {
    ...accounting.settings.currency,
    precision: 2,
    format: '%v %s',
    decimal: ',',
    thousand: '.',
};

export default function () {
    const dropping = ref(false);

    async function read(file) {
        return new Promise((resolve) => {
            var reader = new FileReader();
            reader.onload = function () {
                var r = reader.result;
                resolve({
                    content: r.substr(r.search(',') + 1),
                    name: file.name,
                    type: file.type,
                    size: file.size,
                });
            };
            reader.readAsDataURL(file);
        });
    }
    function onDragEnter(e) {
        e.preventDefault();
        e.stopPropagation();
        dropping.value = true;
    }
    function onDragOver(e) {
        e.preventDefault();
        e.stopPropagation();
    }
    function onDragLeave(e) {
        e.preventDefault();
        e.stopPropagation();
        dropping.value = false;
    }
    function processDrop(e, maxFiles) {
        e.preventDefault();
        e.stopPropagation();
        let dt = e.dataTransfer;
        let files = [...dt.files].slice(0, maxFiles ? maxFiles : dt.files.length);
        let result = [];
        for (const f in files) {
            if (typeof files[f] === 'object') {
                result.push(files[f]);
            }
        }
        dropping.value = false;

        return result;
    }
    function size(file) {
        if (file.size < 1000) {
            return accounting.formatMoney(file.size, {symbol: 'B'});
        }
        if (file.size < 1000000) {
            return accounting.formatMoney(file.size / 1000, {symbol: 'KB'});
        }
        if (file.size < 1000000000) {
            return accounting.formatMoney(file.size / 1000000, {symbol: 'MB'});
        }
        if (file.size < 1000000000000) {
            return accounting.formatMoney(file.size / 1000000000, {symbol: 'GB'});
        }

        return '';
    }

    return {dropping, onDragLeave, onDragOver, onDragEnter, processDrop, read};
}
