-- local PetVariation = {
--     pedHash = {
--         variation = {
--             componentId = 0,
--             drawableId = 0,
--             textureId = 0
--         }
--     }
-- }
PetVariation = {
    ['A_C_Husky'] = {
        ['dark'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 0
        },
        ['brown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 1
        },
        ['white'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 2
        }
    },
    ['A_C_Westy'] = {
        ['white'] = {
            componentId = 4,
            drawableId = 0,
            textureId = 0
        },
        ['brown'] = {
            componentId = 4,
            drawableId = 0,
            textureId = 1
        },
        ['dark'] = {
            componentId = 4,
            drawableId = 0,
            textureId = 2
        }
    },
    ['A_C_shepherd'] = {
        ['darkBrown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 0
        },
        ['white'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 1
        },
        ['brown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 2
        }
    },
    ['A_C_Rottweiler'] = {
        ['dark'] = {
            componentId = 4,
            drawableId = 0,
            textureId = 0
        },
        ['brown'] = {
            componentId = 4,
            drawableId = 0,
            textureId = 1
        },
        ['darkBrown'] = {
            componentId = 4,
            drawableId = 0,
            textureId = 2
        }
    },
    ['A_C_Retriever'] = {
        ['brown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 0
        },
        ['dark'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 1
        },
        ['white'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 2
        },
        ['darkBrown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 3
        }
    },
    ['A_C_Pug'] = {
        ['white'] = {
            componentId = 4,
            drawableId = 0,
            textureId = 0
        },
        ['gray'] = {
            componentId = 4,
            drawableId = 0,
            textureId = 1
        },
        ['brown'] = {
            componentId = 4,
            drawableId = 0,
            textureId = 2
        },
        ['dark'] = {
            componentId = 4,
            drawableId = 0,
            textureId = 3
        }
    },
    ['A_C_Poodle'] = {
        ['white'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 0
        }
    },
    ['A_C_MtLion'] = {
        ['white'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 0
        },
        ['brown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 1
        },
        ['darkBrown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 2
        }
    },
    ['A_C_Panther'] = {
        ['dark'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 0
        }
    },
    ['A_C_Cat_01'] = {
        ['gray'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 0
        },
        ['dark'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 1
        },
        ['brown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 2
        }
    },
    ['A_C_Coyote'] = {
        ['gray'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 0
        },
        ['lightGray'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 1
        },
        ['brown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 2
        },
        ['lightBrown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 3
        },
        ['darkBrown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 3
        },
    },
    ['A_C_Hen'] = {
        ['brown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 0
        },
    },
    ['A_C_Rabbit_01'] = {
        ['brown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 0
        },
        ['DarkBrown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 1
        },
        ['LightBrown'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 2
        },
        ['gray'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 3
        },
    },
    ['A_C_Rat'] = {
        ['normal'] = {
            componentId = 0,
            drawableId = 0,
            textureId = 0
        },
    },
}

--- set color/variation of peds
---@param pedHnadle integer
---@param pedModel string
---@param variation string
---@return boolean
function PetVariation:setPedVariation(pedHnadle, pedModel, variation)
    local data = PetVariation[pedModel]
    local data2 = {}
    if data ~= nil then
        data2 = PetVariation[pedModel][variation]
        if data2 ~= nil and
            IsPedComponentVariationValid(pedHnadle, data2.componentId, data2.drawableId, data2.textureId) then
            SetPedComponentVariation(pedHnadle, data2.componentId, data2.drawableId, data2.textureId)
            return true
        else
            return false
        end
    end
end

--- get all pets collor variation
---@param pedModel any
---@param justVariation any
---@return table
function PetVariation:getRandomPedVariationsName(pedModel, justVariation)
    if justVariation ~= nil and justVariation == true then
        local tmp = {}
        for key, value in pairs(PetVariation[pedModel]) do
            tmp[#tmp + 1] = key
        end
        return tmp[math.random(1, #tmp)] -- #TODO simple for now replace it with alias table later
    end
end

--- get all pets collor variation
---@param pedModel any
---@return table
function PetVariation:getPedVariationsNameList(pedModel)
    local tmp = {}
    for key, value in pairs(PetVariation[pedModel]) do
        tmp[#tmp + 1] = key
    end
    return tmp
end

--- find valid variation
---@param ped any
---@param componentId any
function variationTester(ped, componentId)
    -- componentId
    -- 0 - Head
    -- 1 - Beard
    -- 2 - Hair
    -- 3 - Torso
    -- 4 - Legs
    -- 5 - Hands
    -- 6 - Foot
    -- 7 - None?
    -- 8 - Accessories like parachute, scuba tank
    -- 9 - Accessories like bags, mask, scuba mask
    -- 10- Decals and mask
    -- 11 - Auxiliary parts for torso
    local drawableId = GetNumberOfPedDrawableVariations(ped, componentId)
    print('usable IDs starting from 0 not 1')
    print('count(drawableId): ', drawableId)

    for drawableIndex = 0, drawableId - 1, 1 do
        local textureId = GetNumberOfPedTextureVariations(ped, componentId, drawableIndex)
        print('count(textureId): ', textureId)
        for textureIndex = 0, textureId - 1, 1 do
            print('drawableindex: ', drawableIndex, 'textureIndex: ', textureIndex, 'valid: ',
                IsPedComponentVariationValid(ped, componentId, drawableIndex, textureIndex))
        end
    end
end