local p = {}

p.typeOfKit = {
	["Q170494"] = "body",
	["Q223269"] = "shorts",
	["Q24206679"] = "right_arm",
	["Q3643394"] = "left_arm",
	["Q43663"] = "socks"
}

local function get_snak_id(snak)
	if
		snak and snak.type and snak.type == "statement" and snak.mainsnak and snak.mainsnak.snaktype and
		snak.mainsnak.snaktype == "value" and
		snak.mainsnak.datavalue and
		snak.mainsnak.datavalue.type and
		snak.mainsnak.datavalue.type == "wikibase-entityid" and
		snak.mainsnak.datavalue.value and
		snak.mainsnak.datavalue.value.id
	then
		ID = snak.mainsnak.datavalue.value.id
		return ID
	end
end


local function getEntityFromId(id)
	if id and id ~= "" then
		--	if not(mw.wikibase.isValidEntityId(id)) or not(mw.wikibase.entityExists(id)) then
		--	return false
		--end
		return mw.wikibase.getEntityObject(id)
	else
		return mw.wikibase.getEntityObject()
	end
end

local function get_qualifiers_id(snak)
	if
		snak and snak[1] and snak[1].snaktype == "value" and snak[1].datavalue and
		snak[1].datavalue.type == "wikibase-entityid" and
		snak[1].datavalue.value and
		snak[1].datavalue.value.id
	then
		return snak[1].datavalue.value.id
	end
end

local function find_Kit_type(claims, id)
	local kitId = ""
	mw.log("Module:Wikidata2/P3828: id : " .. id)

	-- Loop through each claim
	for _, statement in pairs(claims) do
		local statementId = get_snak_id(statement)

		-- Check if the statement has qualifiers and the qualifier "P1013"
		if statement.qualifiers and statement.qualifiers["P1013"] then
			local id2 = get_qualifiers_id(statement.qualifiers["P1013"])

			-- If the id matches the given id, set the kitId to the statementId
			if id2 == id then
				kitId = statementId
			end
		end
	end

	-- Return the found kitId
	return kitId
end

local function getQualifierValue(qualifiers, key)
	if qualifiers[key] and qualifiers[key][1] and qualifiers[key][1].snaktype == "value" then
		return qualifiers[key][1].datavalue.value
	end
end

local function Get_image_color(statement)
	local result = { image = "", color = "" }

	if statement.qualifiers then
		result.image = getQualifierValue(statement.qualifiers, "P18") or ""
		result.color = getQualifierValue(statement.qualifiers, "P465") or ""
	end

	return result
end

local function find_team_Kit(claims, id, title, options)
	local kitClaims = {
		body = { image = "", color = "" },
		shorts = { image = "", color = "" },
		right_arm = { image = "", color = "" },
		left_arm = { image = "", color = "" },
		socks = { image = "", color = "" }
	}

	local kitId = find_Kit_type(claims, id)

	local entity = getEntityFromId(kitId)
	if not entity or not entity.claims or not entity.claims["P527"] then
		return ""
	end

	for _, statement in pairs(entity.claims["P527"]) do
		local ssId = get_snak_id(statement)
		if p.typeOfKit[ssId] then
			ssId = p.typeOfKit[ssId]
		end
		kitClaims[ssId] = Get_image_color(statement)
	end

	local mainArgs = {
		qid = kitId,
		leftarm_color = kitClaims.left_arm.color or "",
		Kit_left_arm = kitClaims.left_arm.image or "",
		body_color = kitClaims.body.color or "",
		Kit_body = kitClaims.body.image or "",
		rightarm_color = kitClaims.right_arm.color or "",
		Kit_right_arm = kitClaims.right_arm.image or "",
		shorts_color = kitClaims.shorts.color or "",
		Kit_shorts = kitClaims.shorts.image or "",
		socks_color = kitClaims.socks.color or "",
		Kit_socks = kitClaims.socks.image or "",
		title = title
	}

	local s = mw.getCurrentFrame():expandTemplate { title = "طقم_كرة_قدم/ويكي بيانات/نواة", args =
		mainArgs }
	s = s .. addTrackingCategory(options)

	return s
end

function p.P3828(claims, options)
	options.noicon = "t"

	local Main_Table = {
		find_team_Kit(claims, "Q45321977", "الطقم الأساسي", options),
		find_team_Kit(claims, "Q45321990", "الطقم الاحتياطي", options),
		find_team_Kit(claims, "Q45322173", "الطقم الثالث", options)
	}

	return mw.text.listToText(Main_Table, "", "")
end

return p