------------------------------------------
--      Compatibility Handler by Dhert
------------------------------------------

-- TODO Connect this with TOC logic instead of hardcoding it here
local parts = {
    "Right_Hand",
    "Left_Hand",
    "Right_LowerArm",
    "Left_LowerArm"
}
-- TODO Connect this with TOC logic instead of hardcoding it here
local vars = {
    "isCut",
    "isProsthesisEquipped"
}


local TOC_Compat = {}

-- Raw access, must pass valid part
--- @param player IsoPlayer
--- @param part string
--- @return boolean
TOC_Compat.hasArmPart = function(player, part)
    if not player or not part then return false end
    local data = (player:getModData().TOC and player:getModData().TOC.Limbs) or nil
    return not data or not data[part] or (data[part][vars[1]] and data[part][vars[2]]) or not data[part][vars[1]]
end

-- Raw access, must pass valid parts. Will check for 2 parts (arm and hand)
--- @param player IsoPlayer
--- @param part string
--- @param part2 string
--- @return boolean
TOC_Compat.hasArm = function(player, part, part2)
    if not player or not part then return false end
    local data = (player:getModData().TOC and player:getModData().TOC.Limbs) or nil
    return not data or (not data[part] or (data[part][vars[1]] and data[part][vars[2]]) or not data[part][vars[1]]) or (not data[part] or (data[part2][vars[1]] and data[part2][vars[2]]) or not data[part2][vars[1]])
end

-- Check if hand is available
--- @param player IsoPlayer
--- @param left boolean?
--- @return boolean
TOC_Compat.hasHand = function(player, left)
    return TOC_Compat.hasArm(player, ((left and parts[2]) or parts[1]), ((left and parts[4]) or parts[3]))
end

-- Check if both hands are available
--- @param player IsoPlayer
--- @return boolean
TOC_Compat.hasBothHands = function(player)
    return TOC_Compat.hasArm(player, parts[1], parts[3]) and TOC_Compat.hasArm(player, parts[2], parts[4])
end

-- This returns a number for the hands that you have
----- 11 == both hands
----- 10 == left hand
----- 01 (1) == right hand
----- 00 (0) == no hands
--- @param player IsoPlayer
--- @return integer
TOC_Compat.getHands = function(player)
    return ((TOC_Compat.hasArm(player, parts[1], parts[3]) and 1) or 0) + ((TOC_Compat.hasArm(player, parts[2], parts[4]) and 10) or 0)
end


return TOC_Compat