#include common.js
#include eeprom.js
#include utility.js

var eepromAppl = 1,
    eepromSupportImageEmbed = true,
    eepromSupportAudioEmbed = true,
    eepromSupportVideoEmbed = true;
var eepromInitialise = function(auth) {
    window.eepromHistory = {};
    window.eepromClient = new AmiEEPROM(futami.get('eeprom2'), auth.getHttpAuth);

    window.eepromUploadsTable = $i('uploadHistory');
    $i('uploadSelector').onchange = function() {
        for(var i = 0; i < this.files.length; ++i)
            eepromFileUpload(this.files[i]);
    };
    $i('uploadButton').onclick = function() {
        $i('uploadSelector').click();
    };

    ami.chat.inputBox.watch('paste', function(ev) {
        if(ev.clipboardData && ev.clipboardData.files.length > 0) {
            if('preventDefault' in ev)
                ev.preventDefault();

            for(var i = 0; i < ev.clipboardData.files.length; ++i)
                eepromFileUpload(ev.clipboardData.files[i]);
        }
    });

    if((typeof document.body.ondrop).toLowerCase() !== 'undefined') {
        document.body.ondragenter = function(ev) {
            ev.preventDefault();
            ev.stopPropagation();
        };
        document.body.ondragover = function(ev) {
            ev.preventDefault();
            ev.stopPropagation();
        };
        document.body.ondragleave = function(ev) {
            ev.preventDefault();
            ev.stopPropagation();
        };
        document.body.ondrop = function(ev) {
            ev.preventDefault();
            ev.stopPropagation();
            if(ev.dataTransfer && ev.dataTransfer.files.length > 0)
                for(var i = 0; i < ev.dataTransfer.files.length; ++i)
                    eepromFileUpload(ev.dataTransfer.files[i]);
        };
    }
};
var eepromFileUpload = function(file) {
    if(!window.eepromUploadsTable || !window.eepromClient) {
        console.error('Upload history or EEPROM client is missing???');
        return;
    }

    var uploadEntryWrap = window.eepromUploadsTable.insertRow(0),
        uploadEntry = uploadEntryWrap.insertCell(0);
    uploadEntryWrap.className = (window.eepromUploadsTable.rows.length % 2) ? 'rowOdd' : 'rowEven';

    var name = document.createElement('a');
    name.target = '_blank';
    name.style.wordWrap = 'normal';
    name.style.wordBreak = 'break-word';
    name.style.display = 'block';
    name.style.margin = '2px 10px';
    name.style.textDecoration = 'none !important';
    name.textContent = file.name;
    name.title = 'SHIFT+Click to delete file';
    uploadEntry.appendChild(name);

    var prog = document.createElement('div'),
        progBar = document.createElement('div');
    prog.style.border = '1px solid #808080';
    prog.style.background = '#000';
    prog.style.padding = '0';
    prog.style.margin = '2px 10px';
    progBar.style.background = '#808080';
    progBar.style.width = '0%';
    progBar.style.height = '12px';
    progBar.style.padding = '0';
    progBar.style.border = '1px solid #000';
    progBar.style.boxSizing = 'border-box';
    prog.appendChild(progBar);
    uploadEntry.appendChild(prog);

    var uploadTask = window.eepromClient.create(file);

    uploadTask.onProgress(function(progressInfo) {
        progBar.style.width = `${progressInfo.progress * 100}%`;
    });

    name.onclick = function(ev) {
        if(ev.shiftKey) {
            ev.preventDefault();
            var fileInfo = window.eepromHistory[name.getAttribute('data-eeprom-id') || ''];

            if(fileInfo) {
                window.eepromClient.delete(
                    fileInfo,
                    () => { uploadHistory.deleteRow(uploadEntryWrap.rowIndex); },
                    window.alert
                );
            } else uploadTask.abort();
        }
    };

    uploadTask.start(
        fileInfo => {
            window.eepromHistory[fileInfo.id] = fileInfo;
            name.style.textDecoration = null;
            name.setAttribute('data-eeprom-id', fileInfo.id);
            name.href = fileInfo.url;
            uploadEntry.removeChild(prog);

            var insertText = location.protocol + fileInfo.url;

            if(eepromSupportImageEmbed && fileInfo.isImage())
                insertText = '[img]' + fileInfo.url + '[/img]';
            else if(eepromSupportAudioEmbed && fileInfo.isAudio())
                insertText = '[audio]' + fileInfo.url + '[/audio]';
            else if(eepromSupportVideoEmbed && fileInfo.isVideo())
                insertText = '[video]' + fileInfo.url + '[/video]';

            ami.chat.inputBox.insert(insertText);
        },
        ex => {
            if(ex !== '')
                alert(ex);
            uploadHistory.deleteRow(uploadEntryWrap.rowIndex);
        },
    );
};