const body = document.querySelector('body');
const form = document.querySelector('form');
const grid_form = document.querySelector('.grid_form');
const upload_card = document.querySelector('#upload_card');
const textarea = document.querySelector('textarea');
const select = document.querySelector('select');
const submitButton = document.querySelector('button[type="submit"]');

window.onload = () => {
    if (localStorage["forkText"] !== null) {
        const textArea = document.getElementById('textarea_content');
        textArea.textContent = localStorage["forkText"];
        localStorage.clear();
        onInput();
    }
}

const onInput = () => {
    submitButton.classList.toggle('hidden', !textarea.value);
    select.classList.toggle('hidden', !textarea.value);
}
textarea.addEventListener('input', onInput);
onInput();

document.body.addEventListener('keydown', (e) => {
    if (e.key === 'Enter' && e.ctrlKey) {
        form.submit();
    }
});

async function postData(url = '', data) {
    const response = await fetch(url, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: data
    });

    const text = await response.text();
    return text;
}

function preventDefaults(e) {
    e.preventDefault()
    e.stopPropagation()
}

// Prevent default drag behaviors
['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
    form.addEventListener(eventName, preventDefaults, false);
    document.body.addEventListener(eventName, preventDefaults, false);
});

// highlight the dragarea
['dragenter', 'dragover'].forEach(eventName => {
    form.addEventListener(eventName, highlight, false);
});

// unhighlight the dragarea
['dragleave'].forEach(eventName => {
    form.addEventListener(eventName, unhighlight, false);
});

function highlight(e) {
    form.classList.add('highlight');
    grid_form.classList.add('hidden');
}

function unhighlight(e) {
    form.classList.remove('highlight');
    grid_form.classList.remove('hidden');
}

// Files are dropped
function dropHandler(ev) {
    ev.preventDefault();

    // Give a visual cue
    upload_card.classList.add('show');
    grid_form.classList.add('hidden');

    if (ev.dataTransfer.items) {
        var item = ev.dataTransfer.items[0];
        var blob = item.getAsFile();
        const ext = blob.name.split(".")[1];
        var url = window.location.href;

        postData(url, blob)
            .then(data => {
                window.location.href = data + "." + ext;

                // remove the jazz for if user returns to the prev page
                upload_card.classList.remove('show');
                grid_form.classList.remove('hidden');
                form.classList.remove('highlight');
            })
            .catch(function (err) {
                console.info(err + " url: " + url);
            });
    }
}


// pasting files from the clipboard
document.onpaste = function (pasteEvent) {
    var item = pasteEvent.clipboardData.items[0];
    var blob = item.getAsFile();

    if (blob !== null && blob !== '') {
        var url = window.location.href;

        postData(url, blob)
            .then(data => {
                window.location.href = data;
            })
            .catch(function (err) {
                console.info(err + " url: " + url);
            });
    }
}