--[==[
To inspect the content of this data module, use [[Special:ExpandTemplates]]
and enter the following input text:
  {{#invoke:Road data/dump|dump|module=Module:<name-of-this-module>}}

To inspect the content of this data module when editing, enter the following
into the Debug console:
  local util = require("Module:Road data/util")
  print(util.arrayToString(p))
To inspect a particular route type, change `p` above to include the route type,
e.g., `p.I` and `p["US-Hist"]`.
]==]

-- New York
local NY = {}

local util = require("Module:Road data/util")
local format = mw.ustring.format
util.addAll(NY, require("Module:Road data/strings/USA"))

local suffix = " ([dab||%dab%, |]New York)"

NY.I.link = "Interstate %route% (New York)"

for k, v in pairs(NY) do if k:find ("^I") then 
	v.link = NY.I.link
	end
end
	     
NY.BL.link = "Interstate %route% Business ([dab||%dab%, |]New York)"

for k, v in pairs(NY) do if k:find ("^BL") then 
	v.link = NY.BL.link
	end
end

NY.US.shield = {
	["1-9"] = "US 1-9.svg",
	["9W"] = "US 9W (NY).svg",
	default = {
		hook = "splitlen",
        split = 3,
        above = "US %route% (NY).svg",
        below = "US %route%.svg"
	}
}
NY.US.shieldmain = NY.US.shield
NY.US.link = "U.S. Route %route% in New York"

for k, v in pairs(NY) do if k:find ("^US %d") then 
	v.name = NY.US.name
	v.link = NY.US.link
	end
end

for _,auxType in ipairs({"Alt", "Bus", "Byp", "City", "Conn", "Emerg", "Opt", "Scenic", "Spur", "Temp", "Toll", "Truck"}) do
	local spec = NY[" aux "][auxType]
		for k, v in pairs(NY) do if k:find (auxType) then if k:find ("^US") then
			v.shield = NY.US.shield
			v.shieldmain = NY.US.shieldmain
			v.link = NY.US.base .. " " .. spec.name .. " ([dab||%dab%, |]New York)"
			end
		end
	end
end

for _,year in ipairs({'1926', '1948', '1961'}) do
	for _,auxType in ipairs({"Alt", "Bus", "Byp", "Conn", "Opt", "Scenic", "Spur", "Temp", "Truck"}) do
		local type = "US " .. year
		local spec = NY[" aux "][auxType]
		NY[type .. "-" .. auxType] = {
			shield = NY[type].shield,
			shieldmain = NY[type].shieldmain,
			name = NY[type].name .. " " .. spec.name,
			link = NY[type].base .. " " .. spec.name .. suffix,
			abbr = NY[type].abbr .. " " .. spec.abbrsuffix,
			banner = spec.bannerprefix .. " plate " .. year .. ".svg",
			aux = spec.aux,
			width = NY[type].width
		}
	end
end

NY.NY = {
	base = "New York State Route %route%",
	shield = "NY-%route%.svg",
	shieldmain = {
		["74"] = {"NY-%route%.svg", "Vermont %route%.svg"},
		["149"] = {"NY-%route%.svg", "Vermont %route%.svg"},
		["295"] = {"NY-%route%.svg", "MA Route %route%.svg"},
		["313"] = {"NY-%route%.svg", "Vermont %route%.svg"},
		["314"] = {"NY-%route%.svg", "Vermont %route%.svg"},
		["343"] = {"NY-%route%.svg", "Connecticut Highway %route% wide.svg"},
		["346"] = {"NY-%route%.svg", "Vermont %route%.svg"},
		default = "NY-%route%.svg"
	},
	name = {
		["74"] = "Route %route%",
		["149"] = "Route %route%",
		["295"] = "Route %route%",
		["313"] = "Route %route%",
		["314"] = "Route %route%",
		["343"] = "New York State Route %route% and<br>Connecticut Route %route%",
		["346"] = "Route %route%",
		default = "New York State Route %route%"
	},
	link = "New York State Route %route% [dab||(%dab%)|]",
	abbr = "NY&nbsp;%route%",
	width = "expand"
}
NY.SR = NY.NY

NY.Ref = { --Reference routes
	shield = "",
	shieldlist = "No image.svg",
	name = NY.NY.name.default,
	link = NY.NY.link,
	abbr = NY.NY.abbr
}
	
for _,year in ipairs({"1927", "1948", "1955", "1960"}) do
	NY["NY " .. year] = {
		shield = format("NY-%%route%% (%s).svg", year),
		name = NY.NY.name.default,
		link = NY.NY.link,
		abbr = NY.NY.abbr,
		width = "square",
	}
end

for _,type in ipairs({'NY'}) do
	for _,auxType in ipairs({"Alt", "Bus", "Byp", "Spur", "Truck"}) do
		local spec = NY[" aux "][auxType]
		NY["NY-" .. auxType] = {
			shield = NY.NY.shield,
			name = NY.NY.name.default .. " " .. spec.name,
			link = NY.NY.base .. " " .. spec.name .. NY[" dab "],
			abbr = NY.NY.abbr .. " " .. spec.abbrsuffix,
			banner = spec.bannerprefix .. " plate.svg",
			aux = spec.aux,
			width = "expand",
		}
	end
end

local pkwys = {
	-- link-suffix => parkways
	-- Do not list "Parkway" link-suffix.
	[""] = {
		["Bronx River NYC"] = "Bronx River Parkway",
		["Saw Mill"] = "Saw Mill River Parkway",
		["Robert Moses Cswy"] = "Robert Moses Causeway"
	},
	Drive = {
		["FDR"] = "Franklin D. Roosevelt East River",
		"Harlem River",
		"Seven Lakes"
	},
	["Interstate Parkway"] = {
		"Palisades"
	},
	Road = {
		"Arden Valley",
		"Tiorati Brook"
	},
	["State Parkway"] = {
		"Bear Mountain",
		"Caumsett",
		"Lake Ontario",
		"Robert Moses",
		"Taconic",
	}
}
local pkwyShields = {
	default = "%route% Pkwy Shield.svg",
	Belt = "%route% Pkwy Shield free.svg",
	["Bronx River NYC"] = "Bronx River Pkwy Shield free.svg",
	["Cross Island"] = "%route% Pkwy Shield free.svg",
	["FDR"] = "%route% Drive Shield free.svg",
	["FDR Drive"] = "%route% Shield free.svg",
	["Grand Central"] = "%route% Pkwy Shield free.svg",
	["Harlem River"] = "%route% Drive Shield free.svg",
	["Harlem River Drive"] = "%route% Shield free.svg",
	["Henry Hudson"] = "%route% Pkwy Shield free.svg",
	["Jackie Robinson"] = "%route% Pkwy Shield free.svg",
	["Korean War Vets"] = "%route% Pkwy Shield free.svg",
	Pelham = "%route% Pkwy Shield free.svg",
	Bay = "",
	["Long Mountain"] = ""
}
	
local pkwyAbbrs = {
	-- link-suffix => abbr-suffix
	["Interstate Parkway"] = "Parkway"
}
local pkwyLIPkwys = {
	-- Parkways in Long Island that do not end with "State Parkway"
	"Loop",
	"Ocean",
	"Robert Moses Cswy",
}
local pkwyLIStatePkwys = {
	-- Parkways in Long Island that end with "State Parkway"
	"Bethpage",
	"Heckscher",
	"Meadowbrook",
	"Northern",
	"Sagtikos",
	"Southern",
	"Sunken Meadow",
	"Wantagh"
}
for _,pkwy in ipairs(pkwyLIStatePkwys) do
	table.insert(pkwyLIPkwys, pkwy)
	table.insert(pkwys["State Parkway"], pkwy)
end
local pkwyPIPPkwys = {
	-- Parkways maintained by Palisades Interstate Park Commission
	"Lake Welch",
	"Palisades",
}
for _,pkwy in ipairs(pkwys.Road) do
	table.insert(pkwyPIPPkwys, pkwy)
end
NY.Parkway = {
	shield = pkwyShields,
	name = {default = "%route% Parkway"},
	link = {default = "%route% Parkway [dab||(%dab%)|]"},
	abbr = {default = "%route% Parkway"},
	width = {
	   	default = 'square',
		["Bear Mountain"] = 'wide',
		["Cross County"] = 'wide',
		["Saw Mill"] = 'wide',
		["Sprain Brook"] = 'wide',
		["Taconic State"] = 'wide'
	},
	bannersuffix = {
		default = "green",
		Belt = "",
		["Bronx River NYC"] = "",
		["Cross Island"] = "",
		["FDR"] = "",
		["FDR Drive"] = "",
		["Garden State"] = "GSP",
		["Grand Central"] = "",
		["Harlem River"] = "",
		["Harlem River Drive"] = "",
		["Henry Hudson"] = "",
		["Jackie Robinson"] = "",
		["Korean War Vets"] = "",
		["Merritt"] = "blue",
		Pelham = "",
		["Seven Lakes"] = "brown",
	},
	orientation = {
		default = "",
		Niagara = "upright",
	}
}
for suffix,list in pairs(pkwys) do
	local abbrSuffix = pkwyAbbrs[suffix] or suffix
	for abbr,pkwy in pairs(list) do
		if type(abbr) == "number" then abbr = pkwy end
		if suffix == "" then
			NY.Parkway.name[abbr] = pkwy
			NY.Parkway.link[abbr] = pkwy
			NY.Parkway.abbr[abbr] = pkwy
		else
			NY.Parkway.name[abbr] = pkwy .. " " .. suffix
			NY.Parkway.link[abbr] = pkwy .. " " .. suffix
			if abbrSuffix ~= "Parkway" then
				NY.Parkway.abbr[abbr] = abbr .. " " .. abbrSuffix
			end
		end
	end
end
for _,pkwy in ipairs(pkwyLIPkwys) do
	NY.Parkway.bannersuffix[pkwy] = ""
end
for _,pkwy in ipairs(pkwyPIPPkwys) do
	NY.Parkway.bannersuffix[pkwy] = "brown"
end

NY.SBR = {
	shield = "US Bike %route% (M1-8).svg",
	name = "New York State Bicycle Route %route%",
	link = "New York State Bicycle Route System#State Bicycle Route %route%",
	abbr = "State Bicycle Route %route%",
	orientation = "upright"
}

NY.LSEX = {
	shield = "LaSalle Expy.svg",
	name = "LaSalle Expressway",
	link = "LaSalle Expressway",
	abbr = "LaSalle Expressway",
	bannersuffix = "green"
}

NY.STE = {
	shield = "Southern Tier Expressway.svg",
	name = "Southern Tier Expressway",
	link = "Southern Tier Expressway",
	abbr = "Southern Tier Expressway",
	bannersuffix = "green"
}

-- add new types above this line if you want it to have the state highway browse
for k, v in pairs(NY) do if k:find ("^%a") then
	v.maint = "[[New York State Department of Transportation|NYSDOT]]"
	end
end

for k, v in pairs(NY) do if k:find ("^%a+ %d") then 
	v.maint = "[[New York State Department of Highways|NYSDH]]"
	end
end
         
NY.NYST = {
	shield = "NYS Thruway Sign.svg",
	name = "New York State Thruway",
	link = "New York State Thruway",
	abbr = "New York Thruway",
	bannersuffix = "blue",
	maint = "[[New York State Thruway Authority]]"
}

NY.NYBC = {
	shield = "NYS Thruway Sign.svg",
	name = "Berkshire Connector",
	link = "Berkshire Connector",
	abbr = "Berkshire Connector",
	bannersuffix = "blue"
}

NY.CR.name = {
	arg = "county",
	default = "County Route %route%",
	Fulton = "County Highway %route%"
	}
	
NY.CR.shield = {
	ifexists   = true,
	arg        = "county",
	default    = "CR %route% jct.svg",
	Albany		= "CR %route% jct wide.svg",
	Broome		= {
		hook = "splitlen",
		split = 3,
		below = "CR %route% jct.svg", 
		above = "CR %route% jct wide.svg"
	},
	Cayuga		= "",
	Columbia		= {
		["21C"] = "CR 21C jct wide.svg",
		default = "CR %route% jct.svg"
	},
	Clinton		= "CR %route% jct.svg", 
	Cortland		= "",
	Dutchess		= {
		hook = "splitlen",
		split = 3,
		below = "CR %route% jct.svg", 
		above = "CR %route% jct wide.svg"
	},
	Erie			= "Erie County %route% NY.svg",
	Franklin		= "Franklin County %route% NY.svg",
	Fulton		= "CR %route% jct wide.svg",
	Genesee		= "",
	Herkimer		= "",
	Monroe		= "",
	Montgomery	= "",
	Nassau		= "",
	Niagara		= "",
	Onondaga		= {
		["57"] = "CR 57 jct.svg",
		default = ""
	},
	Oneida		= {
		["840"] = "CR 840 jct wide.svg",
		default = "CR %route% jct.svg"
	},
	Ontario		= "",
	Orleans		= "",
	Schenectady	= "",
	Seneca		= "",
	Steuben		=  {
		["333"] = "CR 333 jct wide.svg",
		default = "CR %route% jct.svg"
	},
	Wayne		= "",
	Westchester	= "",
	Wyoming		= "",
	Yates		= ""
}
NY.CR.shieldmain = {
	ifexists   = true,
	arg        = "county",
	default    = "%county% County %route%.svg",
	Cayuga		= "",
	Cortland		= "",
	Erie			= "Erie County %route% NY.svg",
	Franklin		= "Franklin County %route% NY.svg",
	Genesee		= "",
	Herkimer		= "",
	Monroe		= "",
	Montgomery	= "",
	Nassau		= "",
	Niagara		= "",
	Onondaga		= {
		["57"] = "%county% County %route%.svg",
		default = ""
	},
	Ontario		= "",
	Orleans		= "",
	Schenectady	= "",
	Seneca		= "",
	Wayne		= "",
	Westchester	= "",
	Wyoming		= "",
	Yates		= ""
}
NY.CR.link = "County Route %route% (%county% County, New York)" --ifexist
NY.CR.width = {ifexists   = true,
	arg		= "county",
	default 	= "square",
	Albany	= "wide",
	Columbia	= {
		["21C"] = "wide",
		default = "square"
	},
	Erie		= "16",
	Fulton	= "wide",
	Oneida	= 	{
		["840"] = "wide",
		default = "square"
	},
	Steuben	= 	{
		["333"] = "wide",
		default = "square"
	}
}
NY.CR.bannersuffix = {
	arg = "county",
	Franklin = "green"
}
NY.CR.browse = "[[County routes in New York|County Routes in New York]]"
NY.CR.browselinks = "[[List of county routes in %county% County, New York|County Routes in %county% County]]"

NY["CR-Truck"] = {
	shield = NY.CR.shield,
	link = NY.CR.link .. " Truck",
	abbr = NY.CR.abbr .." Truck",
	banner = "Truck plate county.svg",
	browse = NY.CR.browse,
	browselinks = NY.CR.browselinks
}

NY["CR-Old"] = {
	shield = {
		ifexists	= true,
		arg			= "county",
		default		= "CR %route% jct.svg",
		Cayuga		= "",
		Cortland	= "",
		Erie		= "Erie County %route% NY.svg",
		Franklin	= "Franklin County %route% NY.svg",
		Genesee		= "",
		Herkimer	= "",
		Monroe		= "",
		Montgomery	= "",
		Nassau		= "Nassau County %route% NY.svg",
		Niagara		= "",
		Ontario		= "",
		Orleans		= "",
		Schenectady	= "",
		Seneca		= "",
		Wayne		= "",
		Westchester	= "",
		Wyoming		= "",
		Yates		= ""
	},
	name = NY.CR.name,
	link = NY.CR.link,
	abbr = NY.CR.abbr,
	width = square,
	bannersuffix = {
		arg = "county",
		Franklin = "green",
		Nassau = "orange",
	},
	orientation = {
		arg = "county",
		Nassau = "upright",
	},
	browse = NY.CR.browse,
	browselinks = NY.CR.browselinks
}

-- add new types above this line if you want it to have the state highway browse
for k, v in pairs(NY) do if k:find ("CR") then
	v.maint = "%county% County Highway Department"
	end
end
	
NY.ILR = {
	shield = "Rochester Inner Loop.svg",
	name = "Inner Loop",
	link = "Inner Loop (Rochester)",
	abbr = "Inner Loop",
	width = "wide",
	bannersuffix = "orange",
	maint = ""
}

NY.GSP = {alias = {module = "USA/NJ", type = "GSP"}}
NY.CT = {alias = {module = "USA/CT", type = "CT"}}
NY.MATP = {alias = {module = "USA/MA", type = "MATP"}}
NY.NJ = {alias = {module = "USA/NJ", type = "NJ"}}
NY.PA = {alias = {module = "USA/PA", type = "PA"}}
NY.VT = {alias = {module = "USA/VT", type = "VT"}}
NY["I-VT"] = {alias = {module = "USA/VT", type = "I"}}
NY["QC-A"] = {alias = {module = "CAN/QC", type = "A"}}
NY.ON = {alias = {module = "CAN/ON", type = "ON"}}

return NY