-- Znote LoginWebService (version 1) for protocol 11, 12+
-- Move file to this location: data/scripts/znote_login.lua
-- And restart OT server, it should auto load script.
-- Requires updated version of Znote AAC. (18. June 2020)
-- This script will help Znote AAC connect players to this game server.

local znote_loginWebService = GlobalEvent("znote_loginWebService")
function znote_loginWebService.onStartup()
    print(" ")
	print("=============================")
	print("= Znote AAC loginWebService =")
	print("=============================")
    local configLua = {
        ["SERVER_NAME"] = configManager.getString(configKeys.SERVER_NAME),
        ["IP"] = configManager.getString(configKeys.IP),
        ["GAME_PORT"] = configManager.getNumber(configKeys.GAME_PORT)
    }
    local configSQL = {
        ["SERVER_NAME"] = false,
        ["IP"] = false,
        ["GAME_PORT"] = false
    }
    local webStorage = db.storeQuery([[
		SELECT
			`key`,
            `value`
		FROM `znote_global_storage`
		WHERE `key` IN('SERVER_NAME', 'IP', 'GAME_PORT')
	]])
	if webStorage ~= false then
		repeat
			local key = result.getString(webStorage, 'key')
			local value = result.getString(webStorage, 'value')
            configSQL[key] = value
		until not result.next(webStorage)
		result.free(webStorage)
    end
    local inserts = {}
    if configSQL.SERVER_NAME == false then
        table.insert(inserts, "('SERVER_NAME',".. db.escapeString(configLua.SERVER_NAME) ..")")
    elseif configSQL.SERVER_NAME ~= configLua.SERVER_NAME then
        db.query("UPDATE `znote_global_storage` SET `value`=".. db.escapeString(configLua.SERVER_NAME) .." WHERE `key`='SERVER_NAME';")
        print("= Updated [SERVER_NAME] FROM [" .. configSQL.SERVER_NAME .. "] to [" .. configLua.SERVER_NAME .. "]")
    end
    if configSQL.IP == false then
        table.insert(inserts, "('IP',".. db.escapeString(configLua.IP) ..")")
    elseif configSQL.IP ~= configLua.IP then
        db.query("UPDATE `znote_global_storage` SET `value`=".. db.escapeString(configLua.IP) .." WHERE `key`='IP';")
        print("= Updated [IP] FROM [" .. configSQL.IP .. "] to [" .. configLua.IP .. "]")
    end
    if configSQL.GAME_PORT == false then
        table.insert(inserts, "('GAME_PORT',".. db.escapeString(configLua.GAME_PORT) ..")")
    elseif configSQL.GAME_PORT ~= tostring(configLua.GAME_PORT) then
        db.query("UPDATE `znote_global_storage` SET `value`=".. db.escapeString(configLua.GAME_PORT) .." WHERE `key`='GAME_PORT';")
        print("= Updated [GAME_PORT] FROM [" .. configSQL.GAME_PORT .. "] to [" .. configLua.GAME_PORT .. "]")
    end
    if #inserts > 0 then
        db.query("INSERT INTO `znote_global_storage` (`key`,`value`) VALUES "..table.concat(inserts,',')..";")
        print("= Fixed " .. #inserts .. " missing configurations.")
    end
    print("=============================")
    print("= SERVER_NAME: " .. configLua.SERVER_NAME)
    print("= IP: " .. configLua.IP)
    print("= GAME_PORT: " .. configLua.GAME_PORT)
    print("=============================")
    print(" ")
end
znote_loginWebService:register()
