(function() {
    var isOpen = false,
        guesses = {};
    
    function DBsetOpen(open) {
        $.inidb.SetBoolean("chatguessr", "isOpen", "", open);
        isOpen = open;
        sendData('status',open);
    }

    function DBClearG() {
        guesses = {};
        $.inidb.SetString("chatguessr", "guesses", JSON.stringify(guesses));
        sendData('guesses',guesses);
    }

    function DBAddG(user,position) {
        if(guesses[user] && guesses[user].length > 0){
        }else if(isCoordinates(position)){
            guesses[user] = position;
            $.inidb.SetString("chatguessr", "guesses", JSON.stringify(guesses));
            sendData('guesses',guesses);
        }
    }

    function sendData(tpe, data) {
        $.panelsocketserver.sendJSONToAll(JSON.stringify({
            'eventFamily': 'chatguessr',
            'eventType': tpe,
            'data': data
        }));
    }

    function isCoordinates(coordinates) {
		const regex = /^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$/g;
		return regex.test(coordinates);
	};

    $.bind('command', function(event) {

        const sender = "" + event.getSender().toLowerCase(),
            command = event.getCommand(),
            args = event.getArgs(),
            action = args[0];

        if (command.equalsIgnoreCase('g')) {
            if(isOpen) DBAddG(sender,args);
        }else if (command.equalsIgnoreCase('cg')) {
            if (!action) {
                $.say($.whisperPrefix(sender) + $.lang.get('chatguessr.help', ' Use "!cg [open | close | ...]" to open/close the feature.'));
            } else if (action.equalsIgnoreCase('open')) {
                if(!isOpen) DBsetOpen(true);
            } else if (action.equalsIgnoreCase('close')) {
                if(isOpen) DBsetOpen(false);
            } else if (action.equalsIgnoreCase('clear')) {
                DBClearG();
            } else if (action.equalsIgnoreCase('timer')) {
                sendData(action,  new Date(Date.now().getTime()+value*1000*60));
            } else {
                $.say($.whisperPrefix(sender) + $.lang.get('chatguessr.help'));
            }
        }
    });

    $.bind('initReady', function() {
        $.registerChatCommand('./custom/custom/chatguessr.js', 'cg');
        $.registerChatCommand('./custom/custom/chatguessr.js', 'g',7);

        $.registerChatSubcommand('cg', 'open', 2);
        $.registerChatSubcommand('cg', 'close', 2);
        $.registerChatSubcommand('cg', 'clear', 2);
    });

})();