
----------------------------------------------------------
local   old_time        =   0       --need for update filter
local   stats           =   {}      --information table
local   filter_time     =   1000    --filter time
local   additional_time =   0

--constants
local   actor_position  =   0
local   actor_item_drop =   1
local   actor_item_take =   2
local   actor_item_use  =   3
local   actor_update_task = 4
local   actor_money_trade = 5
local   actor_money_quest = 6  
local   actor_money_total = 7
----------------------------------------------------------
function initialize ()
    stats = {}
end
----------------------------------------------------------
function shutdown   ()
    printf ("GAME STATS START AT LEVEL [%s]", level.name ())
    local l_name = level.name ()
    for a = 1, #stats, 1 do
        if stats[a].id == actor_position then
           printf ("[stats][%s][%s][%d][%f,%f,%f][%f, %f, %f]", l_name, stats[a].time, stats[a].id, stats[a].position.x, stats[a].position.y, stats[a].position.z, stats[a].health, stats[a].radiation, stats[a].satiety)
        elseif stats[a].id == actor_item_take then
           printf ("[stats][%s][%s][%d][%f,%f,%f][%s]", l_name, stats[a].time, stats[a].id, stats[a].position.x, stats[a].position.y, stats[a].position.z, stats[a].item_name)
        elseif stats[a].id == actor_item_drop then
           printf ("[stats][%s][%s][%d][%f,%f,%f][%s]", l_name, stats[a].time, stats[a].id, stats[a].position.x, stats[a].position.y, stats[a].position.z, stats[a].item_name)
        elseif stats[a].id == actor_money_trade or stats[a].id == actor_money_quest or stats[a].id == actor_money_total then
           printf ("[stats][%s][%s][%d][%f,%f,%f][%d]", l_name, stats[a].time, stats[a].id, stats[a].position.x, stats[a].position.y, stats[a].position.z, stats[a].money)
        end
    end
    stats = {}
end
----------------------------------------------------------
function update     (delta, actor)
    additional_time = additional_time + delta
    if additional_time < filter_time then
       return
    end
    additional_time = 0
    local t = {
              time = game.get_game_time ():timeToString (game.CTime.TimeToSeconds), 
              id = actor_position, 
              position = actor:position (),
              health = actor.health,
              radiation = actor.radiation,
              satiety = actor.satiety
              }
    table.insert (stats, t)
end
----------------------------------------------------------
function update_task (id_task, subtask, id_state, actor)

    local state
	if subtask == 0 then
		if id_state == task.fail then
			state = "fail"
		elseif id_state == task.completed then
			state = "complete"
		else
			state = "new"
		end
	else
		state = "update"
	end

    local t = 
            {
            time = game.get_game_time ():timeToString (game.CTime.TimeToSeconds), 
            id = actor_update_task,
            position = actor:position (),
            task = string.format ("%s, %s, %s", id_task, subtask, state)
            }
    table.insert (stats, t)
end
----------------------------------------------------------
function update_take_item (object, actor)
    local t = {
              time = game.get_game_time ():timeToString (game.CTime.TimeToSeconds), 
              id = actor_item_take,
              position = actor:position (),
              item_name = object:name ()
              }
    table.insert (stats, t)
end
----------------------------------------------------------
function update_drop_item (object, actor)
    local t = {
              time = game.get_game_time ():timeToString (game.CTime.TimeToSeconds), 
              id = actor_item_drop,
              position = db.actor:position (),
              item_name = object:name ()
              }
    table.insert (stats, t)
end
----------------------------------------------------------
function money_trade_update (money_i)
    local t = {
              time = game.get_game_time ():timeToString (game.CTime.TimeToSeconds),   
              id = actor_money_trade,
              position = db.actor:position (),
              money = money_i
              }
    table.insert (stats, t)
    t = {
        time = game.get_game_time ():timeToString (game.CTime.TimeToSeconds), 
        id = actor_money_total, 
        position = db.actor:position (),
        money = db.actor:money ()
        }
    table.insert (stats, t)        
end
----------------------------------------------------------
function money_quest_update (money_i)
    local t = {
              time = game.get_game_time ():timeToString (game.CTime.TimeToSeconds),   
              id = actor_money_quest,
              position = db.actor:position (),
              money = money_i
              }
    table.insert (stats, t)
    t = {
        time = game.get_game_time ():timeToString (game.CTime.TimeToSeconds), 
        id = actor_money_total, 
        position = db.actor:position (),
        money = db.actor:money ()
        }
    table.insert (stats, t)        
end
----------------------------------------------------------
