require('./locale');
require('../css/cover.css');
require('../css/site.css');
var common = require('./common');
var checkIfAuth = common.checkIfAuth;
var urlpath = common.urlpath;
var resetCheckAuth = common.resetCheckAuth;
var getLoginState = common.getLoginState;
var clearLoginState = common.clearLoginState;
var historyModule = require('./history');
var parseStorageToHistory = historyModule.parseStorageToHistory;
var parseHistory = historyModule.parseHistory;
var getStorageHistory = historyModule.getStorageHistory;
var getHistory = historyModule.getHistory;
var saveHistory = historyModule.saveHistory;
var removeHistory = historyModule.removeHistory;
var postHistoryToServer = historyModule.postHistoryToServer;
var deleteServerHistory = historyModule.deleteServerHistory;
var parseServerToHistory = historyModule.parseServerToHistory;
var saveStorageHistoryToServer = historyModule.saveStorageHistoryToServer;
var clearDuplicatedHistory = historyModule.clearDuplicatedHistory;
var saveAs = require('file-saver').saveAs;
var List = require('list.js');
var options = {
    valueNames: ['id', 'text', 'timestamp', 'fromNow', 'time', 'tags', 'pinned'],
    item: '
\
            \
            \
                \
					
\
                    
\
                    
\
                        
\
                        
\
                             visited \
                            
\
                            \
                            \
                        
\
                        
\
                    
\
                
 ' + value.time);
    clearHistory = false;
    deleteId = id;
}
function historyPinClick(e) {
    e.preventDefault();
    var $this = $(this);
    var id = $this.closest("a").siblings("span").html();
    var item = historyList.get('id', id)[0];
    var values = item._values;
    var pinned = values.pinned;
    if (!values.pinned) {
        pinned = true;
        item._values.pinned = true;
    } else {
        pinned = false;
        item._values.pinned = false;
    }
    checkIfAuth(function () {
        postHistoryToServer(id, {
            pinned: pinned
        }, function (err, result) {
            if (!err) {
                if (pinned)
                    $this.addClass('active');
                else
                    $this.removeClass('active');
            }
        });
    }, function () {
        getHistory(function (notehistory) {
            for(var i = 0; i < notehistory.length; i++) {
                if (notehistory[i].id == id) {
                    notehistory[i].pinned = pinned;
                    break;
                }
            }
            saveHistory(notehistory);
            if (pinned)
                $this.addClass('active');
            else
                $this.removeClass('active');
        });
    });
}
//auto update item fromNow every minutes
setInterval(updateItemFromNow, 60000);
function updateItemFromNow() {
    var items = $('.item').toArray();
    for (var i = 0; i < items.length; i++) {
        var item = $(items[i]);
        var timestamp = parseInt(item.find('.timestamp').text());
        item.find('.fromNow').text(moment(timestamp).fromNow());
    }
}
var clearHistory = false;
var deleteId = null;
function deleteHistory() {
    checkIfAuth(function () {
        deleteServerHistory(deleteId, function (err, result) {
            if (!err) {
                if (clearHistory) {
                    historyList.clear();
                    checkHistoryList();
                } else {
                    historyList.remove('id', deleteId);
                    checkHistoryList();
                }
            }
            $('.delete-modal').modal('hide');
            deleteId = null;
            clearHistory = false;
        });
    }, function () {
        if (clearHistory) {
            saveHistory([]);
            historyList.clear();
            checkHistoryList();
            deleteId = null;
        } else {
            if (!deleteId) return;
            getHistory(function (notehistory) {
                var newnotehistory = removeHistory(deleteId, notehistory);
                saveHistory(newnotehistory);
                historyList.remove('id', deleteId);
                checkHistoryList();
                deleteId = null;
            });
        }
        $('.delete-modal').modal('hide');
        clearHistory = false;
    });
}
$(".ui-delete-modal-confirm").click(function () {
    deleteHistory();
});
$(".ui-import-from-browser").click(function () {
    saveStorageHistoryToServer(function () {
        parseStorageToHistory(historyList, parseHistoryCallback);
    });
});
$(".ui-save-history").click(function () {
    getHistory(function (data) {
        var history = JSON.stringify(data);
        var blob = new Blob([history], {
            type: "application/json;charset=utf-8"
        });
        saveAs(blob, 'hackmd_history_' + moment().format('YYYYMMDDHHmmss'));
    });
});
$(".ui-open-history").bind("change", function (e) {
    var files = e.target.files || e.dataTransfer.files;
    var file = files[0];
    var reader = new FileReader();
    reader.onload = function () {
        var notehistory = JSON.parse(reader.result);
        //console.log(notehistory);
        if (!reader.result) return;
        getHistory(function (data) {
            var mergedata = data.concat(notehistory);
            mergedata = clearDuplicatedHistory(mergedata);
            saveHistory(mergedata);
            parseHistory(historyList, parseHistoryCallback);
        });
        $(".ui-open-history").replaceWith($(".ui-open-history").val('').clone(true));
    };
    reader.readAsText(file);
});
$(".ui-clear-history").click(function () {
    $('.ui-delete-modal-msg').text('Do you really want to clear all history?');
    $('.ui-delete-modal-item').html('There is no turning back.');
    clearHistory = true;
    deleteId = null;
});
$(".ui-refresh-history").click(function () {
    var lastTags = $(".ui-use-tags").select2('val');
    $(".ui-use-tags").select2('val', '');
    historyList.filter();
    var lastKeyword = $('.search').val();
    $('.search').val('');
    historyList.search();
    $('#history-list').slideUp('fast');
    $('.pagination').slideUp('fast');
    resetCheckAuth();
    historyList.clear();
    parseHistory(historyList, function (list, notehistory) {
        parseHistoryCallback(list, notehistory);
        $(".ui-use-tags").select2('val', lastTags);
        $(".ui-use-tags").trigger('change');
        historyList.search(lastKeyword);
        $('.search').val(lastKeyword);
        checkHistoryList();
        $('#history-list').slideDown('fast');
        $('.pagination').slideDown('fast');
    });
});
$(".ui-logout").click(function () {
    clearLoginState();
    location.href = serverurl + '/logout';
});
var filtertags = [];
$(".ui-use-tags").select2({
    placeholder: $(".ui-use-tags").attr('placeholder'),
    multiple: true,
    data: function () {
        return {
            results: filtertags
        };
    }
});
$('.select2-input').css('width', 'inherit');
buildTagsFilter([]);
function buildTagsFilter(tags) {
    for (var i = 0; i < tags.length; i++)
        tags[i] = {
            id: i,
            text: tags[i]
        };
    filtertags = tags;
}
$(".ui-use-tags").on('change', function () {
    var tags = [];
    var data = $(this).select2('data');
    for (var i = 0; i < data.length; i++)
        tags.push(data[i].text);
    if (tags.length > 0) {
        historyList.filter(function (item) {
            var values = item.values();
            if (!values.tags) return false;
            var found = false;
            for (var i = 0; i < tags.length; i++) {
                if (values.tags.indexOf(tags[i]) != -1) {
                    found = true;
                    break;
                }
            }
            return found;
        });
    } else {
        historyList.filter();
    }
    checkHistoryList();
});
$('.search').keyup(function () {
    checkHistoryList();
});