local p = {}
function p.main(frame)
	local output = {}
	output[1] = 'frame: ' .. type(frame) .. ' '
	if frame[1] then
		output[2] = frame[1]
	else
		output[2] = ''
	end
	output[3] = '\<br />frame.args: ' .. type(frame.args) .. ' '
	if frame.args[1] then
		output[4] = frame.args[1]
	else
		output[4] = ''
	end
	output[5] = '<br />frame:getParent().args ' .. type(frame:getParent().args) .. ' '
	if frame:getParent().args[1] then
		output[6] = frame:getParent().args[1]
	else
		output[6] = ''
	end
	if frame.args['test'] == 0 then
		output[7] = '<br />0 the number'
	elseif frame.args['test'] == '0' then
		output[7] = '<br />0 the character'
	else
		output[7] = ''
	end
	
	return table.concat(output)
end

function p.infoboxattraction(frame)
	local keys = {
		"name",
		"logo",
		"logo_width",
		"logodimensions",
		"logo_dimensions",
		"image",
		"image_width",
		"imagedimensions",
		"image_dimensions",
		"caption",
		"locationarticle",
		"location",
		"child",
		"altname",
		"section",
		"coordinates",
		"status",
		"Status",
		"multiple",
		"auto-cat",
		"cost",
		"soft_opened",
		"opened",
		"closed",
		"year",
		"previousattraction",
		"replacement",
		"type",
		"ride",
		"manufacturer",
		"manufacturers",
		"designer",
		"model",
		"theme",
		"music",
		"height_m",
		"height_ft",
		"drop_m",
		"drop_ft",
		"length_m",
		"length_ft",
		"speed_km/h",
		"speed_mph",
		"speed_rpm",
		"sitearea_sqm",
		"sitearea_sqft",
		"gforce",
		"capacity",
		"vehicle_type",
		"vehicles",
		"riders_per_vehicle",
		"rows",
		"riders_per_row",
		"participants_per_group",
		"audience_capacity",
		"duration",
		"restraint",
		"restriction_cm",
		"restriction_ft",
		"restriction_in",
		"sponsor",
		"custom_label_1",
		"custom_value_1",
		"custom_label_2",
		"custom_value_2",
		"custom_label_3",
		"custom_value_3",
		"custom_label_4",
		"custom_value_4",
		"custom_label_5",
		"custom_value_5",
		"custom_label_6",
		"custom_value_6",
		"custom_label_7",
		"custom_value_7",
		"custom_label_8",
		"custom_value_8",
		"website",
		"homepage",
		"virtual_queue_image",
		"virtual_queue_name",
		"virtual_queue_status",
		"virtual_queue_image2",
		"virtual_queue_name2",
		"virtual_queue_status2",
		"single_rider",
		"pay_per_use",
		"accessible",
		"transfer_accessible",
		"assistive_listening",
		"cc",
	}
	local output = {"{{Infobox attraction/section/sandbox"}
	local args = {[0]={}}
	for k, v in pairs(frame:getParent().args) do
		local val = mw.text.trim(v)
		if (val or "") ~= "" then
			-- val exists and isn't blank
			local loc = tonumber(mw.ustring.sub(k,-1))
			if (loc) and (loc > 0) and (loc <= 10) 
				and (not mw.ustring.match(k, "^location_%d+$"))
				and (not mw.ustring.match(k, "^custom_")) then
				-- last character is a number 1-10, and it's not "location_#" or "custom_"
				if not args[loc] then args[loc] = {} end
				-- strip "location_" and number from key
				local key = mw.ustring.gsub(mw.ustring.gsub(k, "_?%d+$", ""), "^location_", "")
				args[loc][key] = val
			elseif (not loc) and (mw.ustring.match(k, "^location_%D")) then
				-- default to location 1
				if (not args[1]) then args[1] = {} end
				-- strip "location_" from key
				local key = mw.ustring.gsub(k, "^location_", "")
				args[1][key] = v
			else
				args[0][k] = val
			end
		end
	end
	
	if string.lower(string.gsub((args[0].type or ""),".*%s","")) == "show" then
		args[0].ride = "no"
	end
	
	for _, k in ipairs(keys) do
		if args[0][k] then
			table.insert(output, "| " .. k .. " = " .. args[0][k])
		end
	end
	
	for i, a in ipairs(args) do 
		if not args[0]["location_" .. i] then
			-- location subtemplate isn't defined
			table.insert(output, "| location_" .. i .. " = {{Infobox attraction/section/sandbox | child=yes")
			for _, k in ipairs(keys) do
				if a[k] then
					table.insert(output, "|     " .. k .. " = " .. a[k])
				end
			end
			table.insert(output,"|     ride = " .. (args[0].ride or ""))
			table.insert(output,"|     auto-cat = " .. (args[0].auto-cat or ""))
			table.insert(output,"}}")
		end
	end
	table.insert(output, "}}")
	
	return frame:preprocess(table.concat(output, "\n"))
end

function p.killmarkers(frame)
	return frame:extensionTag{ name = nowiki, content = mw.text.killMarkers( frame.args[1] or frame.getParent().args[1] or '' ) }
end

function p.pipetrick(frame)
	u = frame.args[1]
	return "[[User:" .. u .. "|]]"
end

return p