local p = {}

-- Define categories

-- All sortkeys have been guessed. They may be changed by common sense
-- or consensus at [[Wikipedia talk:WikiProject Tropical cyclones]]
local cats = {
	--
	--  TROPICAL CYCLONES
	--
	severe = {
		color = "ccffff",
		name = "Severe tropical storm",
		sortkey = 120,
		icon = "[[File:Severe tropical storm icon.png|18px]]"
	},
	mtstorm = {
		 color = "00faf4", -- Old {{storm colour}} did not support. Value guessed.
		 name = "Moderate tropical storm",
		 sortkey = 105,
		 icon = "[[File:Moderate tropical storm icon.png|18px]]"
	},
	storm = {
		color = "00faf4",
		name = "Tropical storm",
		sortkey = 100,
		icon = "[[File:Tropical storm icon.png|18px]]"
	},
	severedep = {
		color = "5ebaff", -- Old {{storm colour}} did not support. Value guessed.
		name = "Severe tropical depression",
		sortkey = 120
	},
	moddepression = {
		color = "5ebaff", -- Old {{storm colour}} did not support. Value guessed.
		name = "Moderate tropical depression",
		sortkey = 95
	},
	depression = {
		color = "5ebaff",
		name = "Tropical depression",
		sortkey = 90,
		icon = "[[File:Tropical Depression.png|25px]]"
	},
	disturbance = {
		color = "80ccff",
		name = "Tropical disturbance",
		sortkey = 80,
		icon = "[[File:Disturbance icon.png|25px]]"
	},
	subtropicalcyclone = {
		color = "00faf4",
		name = "Subtropical cyclone",
		sortkey = 70
	},
	subtropical = {
		color = "00faf4",
		name = "Subtropical storm",
		sortkey = 65,
		icon = "[[File:Subtropical storm icon.png|18px]]"
	},
	subdepression = {
		color = "5ebaff",
		name = "Subtropical depression",
		sortkey = 62,
		icon = "[[File:Subtropical Depression icon.png|25px]]"
	},
	overland = {
		color = "5ebaff",
		name = "Overland depression",
		sortkey = 60,
		icon = "[[File:Depression icon.png|25px]]"
	},
	subdisturbance = {
		color = "80ccff",
		name = "Subtropical disturbance",
		sortkey = 55,
		icon = "[[File:Disturbance icon.png|25px]]"
	},
	extratropical = {
		color = "cccccc",
		name = "Extratropical cyclone",
		sortkey = 50,
		icon = "[[File:Extratropical cyclone icon.png|18px]]"
	},
	monsoondepression = {
		color = "5ebaff",
		name = "Monsoon depression",
		sortkey = 30,
		icon = "[[File:Monsoon Depression icon.png|25px]]"
	},
	potential = {
		color = "80ccff",
		name = "Potential tropical cyclone",
		sortkey = 25,
		icon = "[[File:Potential tropical cyclone icon.png|25px]]"
	},
	posttropical = {
		color = "cccccc",
		name = "Post-tropical depression",
		sortkey = 70,
		icon = "[[File:Post tropical cyclone icon.png|25px]]"
	},
	remnant = {
		color = "cccccc",
		name = "Post-tropical depression",
		sortkey = 70,
		icon = "[[File:Remnant low icon.png|25px]]"
	},
	unknown = {
		color = "c0c0c0",
		name = "Unknown strength tropical cyclone",
		sortkey = 0,
		icon = "'''?'''"
	},
	-- SSWHS hurricane categories
	cat5 = {
		color = "ff6060",
		name = {
			atl = "Category 5 hurricane",
			epac = "Category 5 hurricane",
			satl = "Category 5 hurricane",
			wpac = "Category 5-equivalent super typhoon",
			default = "Category 5-equivalent tropical cyclone"
		},
		sortkey = 80050,
		icon = "[[File:Category 5 hurricane icon.png|18px]]"
	},
	cat4 = {
		color = "ff8f20",
		name = {
			atl = "Category 4 hurricane",
			epac = "Category 4 hurricane",
			satl = "Category 4 hurricane",
			wpac = "Category 4-equivalent typhoon",
			default = "Category 4-equivalent tropical cyclone"
		},
		sortkey = 80040,
		icon = "[[File:Category 4 hurricane icon.png|18px]]"
	},
	cat3 = {
		color = "ffc140",
		name = {
			atl = "Category 3 hurricane",
			epac = "Category 3 hurricane",
			satl = "Category 3 hurricane",
			wpac = "Category 3-equivalent typhoon",
			default = "Category 3-equivalent tropical cyclone"
		},
		sortkey = 80030,
		icon = "[[File:Category 3 hurricane icon.png|18px]]"
	},
	cat2 = {
		color = "ffe775",
		name = {
			atl = "Category 2 hurricane",
			epac = "Category 2 hurricane",
			satl = "Category 2 hurricane",
			wpac = "Category 2-equivalent typhoon",
			default = "Category 2-equivalent tropical cyclone"
		},
		sortkey = 80020,
		icon = "[[File:Category 2 hurricane icon.png|18px]]"
	},
	cat1 = {
		color = "ffffcc",
		name = {
			atl = "Category 1 hurricane",
			epac = "Category 1 hurricane",
			satl = "Category 1 hurricane",
			wpac = "Category 1-equivalent typhoon",
			default = "Category 1-equivalent tropical cyclone"
		},
		sortkey = 80010,
		icon = "[[File:Category 1 hurricane icon.png|18px]]"
	},
	supertyphoon = {
		color = "ff6060",
		name = "Category 4 super typhoon",
		sortkey = 80045
	},
	typhoon = {
		color = "fdaf9a",
		name = "Typhoon",
		sortkey = 60010
	},
	-- HKO
	svtyphoon = {
		color = "ff8f20",
		name = "Severe typhoon",
		sortkey = 60015
	},
	vstyphoon = {
		color = "fe887d",
		name = "Very strong typhoon",
		sortkey = 60020,
		icon = "[[File:Very strong typhoon icon.png|18px]]"
	},
	vityphoon = {
		color = "ff6060",
		name = "Violent typhoon",
		sortkey = 60030,
		icon = "[[File:Violent typhoon icon.png|18px]]"
	},
	-- PAGASA
	styphoon = {
		color = "ff6060",
		name = "Supertyphoon",
		sortkey = 60050
	},
	sprcyclstorm = {
		color = "ff6060",
		name = "Super cyclonic storm",
		sortkey = 50020,
		icon = "[[File:Super cyclonic storm icon.png|18px]]"
	},
	esvrcyclstorm = {
		color = "ffc140",
		name = "Extremely severe cyclonic storm",
		sortkey = 50015,
		icon = "[[File:Extremely severe cyclonic storm icon.png|18px]]"
	},
	vsvrcyclstorm = {
		color = "ffffcc",
		name = "Very severe cyclonic storm",
		sortkey = 50010,
		icon = "[[File:Very severe cyclonic storm icon.png|18px]]"
	},
	svrcyclstorm = {
		color = "ccffff",
		name = "Severe cyclonic storm",
		sortkey = 50008,
		icon = "[[File:Severe cyclonic storm icon.png|18px]]"
	},
	niocyclone = {
		color = "00faf4",
		name = "Cyclonic storm",
		sortkey = 50006,
		icon = "[[File:Cyclonic storm icon.png|18px]]"
	},
	deepdepression = {
		color = "5ebaff",
		name = "Deep depression",
		sortkey = 50002,
		icon = "[[File:Deep depression icon.png|25px]]"
	},
	niodepression = {
		color = "80ccff",
		name = "Depression",
		sortkey = 50001,
		icon = "[[File:Depression icon.png|25px]]"
	},
	nioland = {
		color = "80ccff",
		name = "Land depression",
		sortkey = 50000,
		icon = "[[File:Land depression icon.png|25px]]"
	},
	aus5 = {
		color = "ff6060",
		name = "Category 5 severe tropical cyclone",
		sortkey = 40015,
		icon = "[[File:Aus 5 icon.png|18px]]"
	},
	aus4 = {
		color = "ffc140",
		name = "Category 4 severe tropical cyclone",
		sortkey = 40013,
		icon = "[[File:Aus 4 icon.png|18px]]"
	},
	aus3 = {
		color = "ffffcc",
		name = "Category 3 severe tropical cyclone",
		sortkey = 40010,
		icon = "[[File:Aus 3 icon.png|18px]]"
	},
	aus2 = {
		color = "ccffff",
		name = "Category 2 tropical cyclone",
		sortkey = 40008,
		icon = "[[File:Aus 2 icon.png|18px]]"
	},
	aus1 = {
		color = "00faf4",
		name = "Category 1 tropical cyclone",
		sortkey = 40006,
		icon = "[[File:Aus 1 icon.png|18px]]"
	},
	low = {
		color = "5ebaff",
		name = "Tropical low",
		sortkey = 40002,
		icon = "[[File:Tropical Low.png|25px]]"
	},
	sublow = {
		color = "5ebaff",
		name = "Subtropical low",
		sortkey = 40000
	},
	vintense = {
		color = "ff6060",
		name = "Very intense tropical cyclone",
		sortkey = 30010,
		icon = "[[File:Very intense tropical cyclone icon.png|18px]]"
	},
	intense = {
		color = "ffc140",
		name = "Intense tropical cyclone",
		sortkey = 30008,
		icon = "[[File:Intense tropical cyclone icon.png|18px]]"
	},
	tropicalcyclone = {
		color = "ffffcc",
		name = "Tropical cyclone",
		sortkey = 30006,
		icon = "'''TC'''"
	},
	mstorm = {
		color = "00faf4",
		name = "Moderate tropical storm",
		sortkey = 30004,
		icon = "[[File:Moderate tropical storm icon.png|18px]]"
	},
	zodw = {
		color = "80ccff",
		name = "Zone of disturbed weather",
		sortkey = 30000,
		icon = "[[File:Disturbed weather icon.png|25px]]"
	},
	shemsvrtc = {
		color = "ffe775",
		name = "Severe tropical cyclone",
		sortkey = 20020
	},
	shem5 = {
		color = "ff6060",
		name = "Severe tropical cyclone",
		sortkey = 20010
	},
	shem4 = {
		color = "ffc140",
		name = "Tropical cyclone",
		sortkey = 20008
	},
	shem2 = {
		color = "ccffff",
		name = "Tropical cyclone",
		sortkey = 20008
	},
	shem1 = {
		color = "00faf4",
		name = "Tropical cyclone",
		sortkey = 20008
	},
	--
	-- WINTER STORMS
	--
	-- Regional Snowfall Index
	rsi0 = {
		color = "cccccc",
		name = "Category 0 \"Nuisance\"",
		sortkey = 80100,
		icon = "[[File:RsiC0.png|25px]]"
	},
	rsi1 = {
		color = "ffffcc",
		name = "Category 1 \"Notable\"",
		sortkey = 80110,
		icon = "[[File:RsiC1.png|25px]]"
	},
	rsi2 = {
		color = "ffe775",
		name = "Category 2 \"Minor\"",
		sortkey = 80120,
		icon = "[[File:RsiC2.png|25px]]"
	},
	rsi3 = {
		color = "ffc140",
		name = "Category 3 \"Major\"",
		sortkey = 80130,
		icon = "[[File:RsiC3.png|25px]]"
	},
	rsi4 = {
		color = "ff8f20",
		name = "Category 4 \"Crippling\"",
		sortkey = 80140,
		icon = "[[File:RsiC4.png|25px]]"
	},
	rsi5 = {
		color = "ff6060",
		name = "Category 5 \"Extreme\"",
		sortkey = 80150,
		icon = "[[File:RsiC5.png|25px]]"
	},
	-- Winter Storm Severity Index
	wssinone = {
		color = "cccccc",
		name = "No impacts",
		sortkey = 80200,
		icon = "[[File:RsiC0.png|25px]]"
	},
	wssilimited = {
		color = "80ccff",
		name = "Limited impacts",
		sortkey = 80210,
		icon = "[[File:RsiC1.png|25px]]"
	},
	wssiminor = {
		color = "ffc140",
		name = "Minor impacts",
		sortkey = 80220,
		icon = "[[File:RsiC2.png|25px]]"
	},
	wssimoderate = {
		color = "ff8f20",
		name = "Moderate impacts",
		sortkey = 80230,
		icon = "[[File:RsiC3.png|25px]]"
	},
	wssimajor = {
		color = "ff6060",
		name = "Major impacts",
		sortkey = 80240,
		icon = "[[File:RsiC4.png|25px]]"
	},
	wssiextreme = {
		color = "cf75ff",
		name = "Extreme impacts",
		sortkey = 80250,
		icon = "[[File:RsiC5.png|25px]]"
	},
	--
	-- TORNADOES
	--
	efu = {
		color = "cccccc",
		name = "EFU tornado",
		sortkey = 1001,
		icon = "[[File:Ef-scaleU.png|25px]]"
	},
	ef0 = {
		color = "00faf4",
		name = "EF0 tornado",
		sortkey = 1000,
		icon = "[[File:Ef-scale0.png|25px]]"
	},
	ef1 = {
		color = "ffffcc",
		name = "EF1 tornado",
		sortkey = 1010,
		icon = "[[File:Ef-scale1.png|25px]]"
	},
	ef2 = {
		color = "ffe775",
		name = "EF2 tornado",
		sortkey = 1020,
		icon = "[[File:Ef-scale2.png|25px]]"
	},
	ef3 = {
		color = "ffc140",
		name = "EF3 tornado",
		sortkey = 1030,
		icon = "[[File:Ef-scale3.png|25px]]"
	},
	ef4 = {
		color = "ff8f20",
		name = "EF4 tornado",
		sortkey = 1040,
		icon = "[[File:Ef-scale4.png|25px]]"
	},
	ef5 = {
		color = "ff6060",
		name = "EF5 tornado",
		sortkey = 1050,
		icon = "[[File:Ef-scale5.png|25px]]"
	},
	-- Beaufort Scale (windstorms)
	beaufort0 = {
		color = "FFFFFF",
		name = "Calm (Force 0)",
		sortkey = 1500,
	},
	beaufort1 = {
		color = "757575",
		name = "Light Air (Force 1)",
		sortkey = 1510,
	},
	beaufort2 = {
		color = "909090",
		name = "Light Breeze (Force 2)",
		sortkey = 1520,
	},
	beaufort3 = {
		color = "B7B7B7",
		name = "Gentle Breeze (Force 3)",
		sortkey = 1530,
	},
	beaufort4 = {
		color = "D2D2D2",
		name = "Moderate Breeze (Force 4)",
		sortkey = 1540,
	},
	beaufort5 = {
		color = "F1F1F1",
		name = "Fresh Breeze (Force 5)",
		sortkey = 1550,
	},
	beaufort6 = {
		color = "007FCE",
		name = "Strong Breeze (Force 6)",
		sortkey = 1560,
	},
    beaufort7 = {
		color = "46A1FF",
		name = "Near Gale (Force 7)",
		sortkey = 1570,
	},
    beaufort8 = {
		color = "5EDBF8",
		name = "Gale (Force 8)",
		sortkey = 1580,
	},
    beaufort9 = {
		color = "3BFDFD",
		name = "Strong Gale (Force 9)",
		sortkey = 1590,
	},
    beaufort10 = {
		color = "AAFD9C",
		name = "Storm (Force 10)",
		sortkey = 1600,
	},
    beaufort11 = {
		color = "D6FFA4",
		name = "Violent Storm (Force 11)",
		sortkey = 1610,
	},
    beaufort12 = {
		color = "FFFCD1",
		name = "Hurricane-force (Force 12)",
		sortkey = 1620,
	}
}

-- Define aliases

-- All non-alphanumeric characters are already stripped, and the string is
-- already set to lowercase, so additional aliases for those are no longer
-- required.

cats["rsinuisance"] = cats["rsi0"]
cats["rsinotable"] = cats["rsi1"]
cats["rsiminor"] = cats["rsi2"]
cats["rsimajor"] = cats["rsi3"]
cats["rsicrippling"] = cats["rsi4"]
cats["rsiextreme"] = cats["rsi5"]
cats["rsinuisance"] = cats["rsi0"]
cats["wssi0"] = cats["wssinone"]
cats["wssi1"] = cats["wssilimited"]
cats["wssi2"] = cats["wssiminor"]
cats["wssi3"] = cats["wssimoderate"]
cats["wssi4"] = cats["wssimajor"]
cats["wssi5"] = cats["wssiextreme"]
cats["sty"] = cats["supertyphoon"]
cats["nwpsevere"] = cats["severe"]
cats["strong"] = cats["severe"]
cats["swiosts"] = cats["severe"]
cats["sts"] = cats["severe"]
cats["severets"] = cats["severe"]
cats["ty"] = cats["typhoon"]
cats["vstrtyphoon"] = cats["vstyphoon"]
cats["vsty"] = cats["vstyphoon"]
cats["vity"] = cats["vityphoon"]
cats["td"] = cats["depression"]
cats["ts"] = cats["storm"]
cats["nwpstorm"] = cats["storm"]
cats["d"] = cats["depression"]
cats["overlanddepression"] = cats["overland"]
cats["od"] = cats["overland"]
cats["spdepression"] = cats["depression"]
cats["shdepression"] = cats["depression"]
cats["shemdepression"] = cats["depression"]
cats["swiodepression"] = cats["depression"]
cats["spdepression"] = cats["depression"]
cats["nwpdepression"] = cats["depression"]
cats["swsubdep"] = cats["subdepression"]
cats["sd"] = cats["subdepression"]
cats["ss"] = cats["subtropical"]
cats["et"] = cats["extratropical"]
cats["ex"] = cats["extratropical"]
cats["md"] = cats["monsoondepression"]
cats["pt"] = cats["potential"]
cats["potentialtropicalcyclone"] = cats["potential"]
cats["potentialtropicalcyclone"] = cats["potential"]
cats["post"] = cats["posttropical"]
cats["remnantlow"] = cats["remnant"]
cats["rl"] = cats["remnant"]
cats["sucs"] = cats["sprcyclstorm"]
cats["escs"] = cats["esvrcyclstorm"]
cats["vscs"] = cats["vsvrcyclstorm"]
cats["scs"] = cats["svrcyclstorm"]
cats["cs"] = cats["niocyclone"]
cats["dd"] = cats["deepdepression"]
cats["cyclstorm"] = cats["niocyclone"]
cats["landdepression"] = cats["nioland"]
cats["land"] = cats["nioland"]
cats["ld"] = cats["nioland"]
cats["fiji5"] = cats["aus5"]
cats["fiji4"] = cats["aus4"]
cats["fiji3"] = cats["aus3"]
cats["fiji2"] = cats["aus2"]
cats["fiji1"] = cats["aus1"]
cats["tl"] = cats["low"]
cats["di"] = cats["disturbance"]
cats["swiodisturbance"] = cats["disturbance"]
cats["tdist"] = cats["disturbance"]
cats["mts"] = cats["mstorm"]
cats["sub"] = cats["mstorm"]
cats["vitc"] = cats["vintense"]
cats["itc"] = cats["intense"]
cats["tc"] = cats["tropicalcyclone"]
cats["swiotc"] = cats["tropicalcyclone"]
cats["shem3"] = cats["tropicalcyclone"]
cats["shemtc"] = cats["tropicalcyclone"]
cats["f12"] = cats["beaufort12"]
cats["f11"] = cats["beaufort11"]
cats["f10"] = cats["beaufort10"]
cats["f9"] = cats["beaufort9"]
cats["f8"] = cats["beaufort8"]
cats["f7"] = cats["beaufort7"]
cats["f6"] = cats["beaufort6"]
cats["f5"] = cats["beaufort5"]
cats["f4"] = cats["beaufort4"]
cats["f3"] = cats["beaufort3"]
cats["f2"] = cats["beaufort2"]
cats["f1"] = cats["beaufort1"]
cats["f0"] = cats["beaufort0"]

-- Key standardization check
for k, v in pairs(cats) do
	if k ~= mw.ustring.gsub(k, "[^%w]", "") then
		mw.addWarning(
			"Category \""
			.. k
			.. "\" in [[Module:Storm categories/categories]] is defined with a non-alphanumeric key. "
			.. "This key will likely be unusable unless non-alphanumeric characters are removed."
		)
	end
end

p.defaultCategory = "unknown"
p.cats = cats
return p