$(document).ready(function()
{
    M.FloatingActionButton.init(document.querySelectorAll('.edit-transaction-button'), {
        direction: 'left',
        hoverEnabled: false
    });

    $('.collapsible').collapsible();

    $('#table-transaction-rows').DataTable({
        paging: false,
        order: [[2, 'desc']],
        info: false,
        scrollX: true,
        scrollY: false,
        columnDefs: [
            { orderable: false, targets:  6}
        ],
        language: { search: '' , searchPlaceholder: localizedSearch},
    });

    if(transactionNameSuggestions !== undefined)
    {
        let nameElements = document.querySelectorAll('.autocomplete');
        let autoCompleteInstances = M.Autocomplete.init(nameElements, {
            data: transactionNameSuggestions,
            sortFunction: function(a,b, inputString) {return false;}
        });

        // prevent tab traversal for dropdown (otherwise "tab" needs to be hit twice to jump from name input to amount input)
        for(let i = 0; i < autoCompleteInstances.length; i++)
        {
            autoCompleteInstances[i].dropdown.dropdownEl.tabIndex = -1;
        }
    }

    initCsvTransactions();
});

function initCsvTransactions()
{
    initCsvTransactionForms();
    initCsvTransactionButtons();

    initCustomSelects();

    M.FloatingActionButton.init(document.querySelectorAll('.edit-transaction-button'), {
        direction: 'left',
        hoverEnabled: false
    });
}

function initCsvTransactionForms()
{
    const forms = document.querySelectorAll('[name="NewTransactionInPlace"]');

    for(let i = 0; i < forms.length; i++)
    {
        let form = forms[i];
        form.removeEventListener('submit', submitTransactionInPlaceForm);
        form.addEventListener('submit', submitTransactionInPlaceForm);
    }
}

function submitTransactionInPlaceForm(event)
{
    const form = event.target;
    const csvTransactionId = form.dataset.index;

    $.ajax({
        type: 'POST',
        url: $(this).attr('action'),
        data: new FormData(form),
        processData: false,
        contentType: false,
        success: function(response)
        {
            $('#transaction-import-row-' + csvTransactionId).replaceWith(response);
            initCsvTransactions();
        },
        error: function(response)
        {
            M.toast({
                html: "Error saving transaction",
                classes: 'red'
            });
            console.error(response);
        }
    });

    event.preventDefault();
}

function initCsvTransactionButtons()
{
    const buttonsSkip = document.getElementsByClassName('button-request-transaction-import-skip');
    for(let i = 0; i < buttonsSkip.length; i++)
    {
        const button = buttonsSkip[i];
        button.removeEventListener('click', skipRow);
        button.addEventListener('click', skipRow);
    }

    const buttonsUndoSkip = document.getElementsByClassName('button-request-transaction-import-undo-skip');
    for(let i = 0; i < buttonsUndoSkip.length; i++)
    {
        const button = buttonsUndoSkip[i];
        button.removeEventListener('click', undoSkipRow);
        button.addEventListener('click', undoSkipRow);
    }
}

function skipRow(event)
{
    performCsvTransactionGetRequestWithoutReload(event.currentTarget, 'Error skipping transaction');
}

function undoSkipRow(event)
{
    performCsvTransactionGetRequestWithoutReload(event.currentTarget, 'Error undo skip transaction');
}

function performCsvTransactionGetRequestWithoutReload(button, errorMessage)
{
    const url = button.dataset.url;
    const csvTransactionId = button.dataset.index;

    $.ajax({
        type: 'GET',
        url: url,
        data: {},
        success: function(data)
        {
            $('#transaction-import-row-' + csvTransactionId).replaceWith(data);
            initCsvTransactions();
        },
        error: function(response)
        {
            M.toast({
                html: errorMessage,
                classes: 'red'
            });
            console.error(response);
        }
    });
}