-------------------
-- Player Classes
--

-- NOTE: This is a very simple interface for classes, more features will be
--       added depending on the various mechanisms we will need

-- Global namespace
pclasses = {}

-- API
pclasses.api = {}
pclasses.api.util = {}

-- Configuration
pclasses.conf = {}
pclasses.conf.default_class = "adventurer"
pclasses.conf.save_interval = 3 * 60
pclasses.conf.datafile = minetest.get_worldpath() .. "/pclasses"

-- Classes
pclasses.classes = {}

-- Data
pclasses.datas = {}
pclasses.datas.players = {}
pclasses.datas.reserved_items = {}
pclasses.datas.hud_ids = {} -- HUD maybe?

dofile(minetest.get_modpath("pclasses") .. "/api.lua")



---------------------------
-- Backup and load system
--

-- Startup
local pfile = io.open(pclasses.conf.datafile, "r")
if pfile then
	local line = pfile:read()
	if line then
		pclasses.datas.players = minetest.deserialize(line)
	end
	pfile.close()
end

-- Frequent backup
local function save_datas()
	local pfile = io.open(pclasses.conf.datafile, "w")
	pfile:write(minetest.serialize(pclasses.datas.players))
	pfile.close()
	minetest.log("action", "[PClasses] Datas saved")
end

local save_timer = 0
minetest.register_globalstep(function(dtime)
	save_timer = save_timer + dtime
	if save_timer >= pclasses.conf.save_interval then
		save_datas()
		save_timer = 0
	end
end)
minetest.register_on_shutdown(save_datas)



------------------
-- Default class
--

if pclasses.conf.default_class then
	dofile(minetest.get_modpath("pclasses") .. "/" .. pclasses.conf.default_class .. ".lua")
	if pclasses.api.get_class_by_name(pclasses.conf.default_class) then
		minetest.register_on_joinplayer(function(player)
			if not pclasses.api.get_player_class(player:get_player_name()) then
				pclasses.api.set_player_class(player:get_player_name(),
					pclasses.conf.default_class)
			end
		end)
	end
end



------------
-- Classes
--

dofile(minetest.get_modpath("pclasses") .. "/warrior.lua")
dofile(minetest.get_modpath("pclasses") .. "/hunter.lua")