-----------------------------------
--
-- NPC PATH WALKING
--
-----------------------------------
xi = xi or {}

xi.path =
{
    flag =
    {
        NONE     = 0,
        RUN      = 1,
        WALLHACK = 2,
        REVERSE  = 4,
        SCRIPT   = 8,
        SLIDE    = 16,
        PATROL   = 32,
        COORDS   = 64,
    },

    -- returns the point at the given index
    get = function(points, index)
        local point = points[index]
        return { point['x'], point['y'], point['z'] }
    end,

    -- returns number of points in given path
    length = function(points)
        return #points
    end,

    -- returns first point in given path
    first = function(points)
        return xi.path.get(points, 1)
    end,

    -- returns last point in given path
    last = function(points)
        local length = xi.path.length(points)
        local result = xi.path.get(points, length)
        return result
    end,

    -- Randomly picks a point to path to within the provided distance range
    randomPath = function(mob, points, min, max)
        local mobPosition = mob:getPos()

        local validPoints = {}
        for point, position in ipairs(points) do
            local distance =  utils.distance(mobPosition, position)
            if distance > min and distance < max then
                table.insert(validPoints, point)
            end
        end

        if #validPoints > 0 then
            local target = points[validPoints[math.random(1, #validPoints)]]
            mob:pathThrough({ target.x, target.y, target.z })
        end
    end
}
