local variations = {
	jackets = {male = {}, female = {}},
	hair = {male = {}, female = {}},
	bags = {male = {}, female = {}},
	visor = {male = {}, female = {}},
	gloves = {
		male = {
			[16] = 4,
			[17] = 4,
			[18] = 4,
			[19] = 0,
			[20] = 1,
			[21] = 2,
			[22] = 4,
			[23] = 5,
			[24] = 6,
			[25] = 8,
			[26] = 11,
			[27] = 12,
			[28] = 14,
			[29] = 15,
			[30] = 0,
			[31] = 1,
			[32] = 2,
			[33] = 4,
			[34] = 5,
			[35] = 6,
			[36] = 8,
			[37] = 11,
			[38] = 12,
			[39] = 14,
			[40] = 15,
			[41] = 0,
			[42] = 1,
			[43] = 2,
			[44] = 4,
			[45] = 5,
			[46] = 6,
			[47] = 8,
			[48] = 11,
			[49] = 12,
			[50] = 14,
			[51] = 15,
			[52] = 0,
			[53] = 1,
			[54] = 2,
			[55] = 4,
			[56] = 5,
			[57] = 6,
			[58] = 8,
			[59] = 11,
			[60] = 12,
			[61] = 14,
			[62] = 15,
			[63] = 0,
			[64] = 1,
			[65] = 2,
			[66] = 4,
			[67] = 5,
			[68] = 6,
			[69] = 8,
			[70] = 11,
			[71] = 12,
			[72] = 14,
			[73] = 15,
			[74] = 0,
			[75] = 1,
			[76] = 2,
			[77] = 4,
			[78] = 5,
			[79] = 6,
			[80] = 8,
			[81] = 11,
			[82] = 12,
			[83] = 14,
			[84] = 15,
			[85] = 0,
			[86] = 1,
			[87] = 2,
			[88] = 4,
			[89] = 5,
			[90] = 6,
			[91] = 8,
			[92] = 11,
			[93] = 12,
			[94] = 14,
			[95] = 15,
			[96] = 4,
			[97] = 4,
			[98] = 4,
			[99] = 0,
			[100] = 1,
			[101] = 2,
			[102] = 4,
			[103] = 5,
			[104] = 6,
			[105] = 8,
			[106] = 11,
			[107] = 12,
			[108] = 14,
			[109] = 15,
			[110] = 4,
			[111] = 4,
			[115] = 112,
			[116] = 112,
			[117] = 112,
			[118] = 112,
			[119] = 112,
			[120] = 112,
			[121] = 112,
			[122] = 113,
			[123] = 113,
			[124] = 113,
			[125] = 113,
			[126] = 113,
			[127] = 113,
			[128] = 113,
			[129] = 114,
			[130] = 114,
			[131] = 114,
			[132] = 114,
			[133] = 114,
			[134] = 114,
			[135] = 114,
			[136] = 15,
			[137] = 15,
			[138] = 0,
			[139] = 1,
			[140] = 2,
			[141] = 4,
			[142] = 5,
			[143] = 6,
			[144] = 8,
			[145] = 11,
			[146] = 12,
			[147] = 14,
			[148] = 112,
			[149] = 113,
			[150] = 114,
			[151] = 0,
			[152] = 1,
			[153] = 2,
			[154] = 4,
			[155] = 5,
			[156] = 6,
			[157] = 8,
			[158] = 11,
			[159] = 12,
			[160] = 14,
			[161] = 112,
			[162] = 113,
			[163] = 114,
			[165] = 4,
			[166] = 4,
			[167] = 4,
			[168] = 4,
			[170] = 15,
			[171] = 0,
			[172] = 1,
			[173] = 2,
			[174] = 4,
			[175] = 5,
			[176] = 6,
			[177] = 8,
			[178] = 11,
			[179] = 12,
			[180] = 14,
			[181] = 112,
			[182] = 113,
			[183] = 114,
			[185] = 184,
			[186] = 184,
			[187] = 184,
			[188] = 184,
			[189] = 185,
			[190] = 184,
			[191] = 184,
			[192] = 184,
			[193] = 184,
			[194] = 184,
		},
		female = {
			[16] = 11,
			[17] = 3,
			[18] = 3,
			[19] = 3,
			[20] = 0,
			[21] = 1,
			[22] = 2,
			[23] = 3,
			[24] = 4,
			[25] = 5,
			[26] = 6,
			[27] = 7,
			[28] = 9,
			[29] = 11,
			[30] = 12,
			[31] = 14,
			[32] = 15,
			[33] = 0,
			[34] = 1,
			[35] = 2,
			[36] = 3,
			[37] = 4,
			[38] = 5,
			[39] = 6,
			[40] = 7,
			[41] = 9,
			[42] = 11,
			[43] = 12,
			[44] = 14,
			[45] = 15,
			[46] = 0,
			[47] = 1,
			[48] = 2,
			[49] = 3,
			[50] = 4,
			[51] = 5,
			[52] = 6,
			[53] = 7,
			[54] = 9,
			[55] = 11,
			[56] = 12,
			[57] = 14,
			[58] = 15,
			[59] = 0,
			[60] = 1,
			[61] = 2,
			[62] = 3,
			[63] = 4,
			[64] = 5,
			[65] = 6,
			[66] = 7,
			[67] = 9,
			[68] = 11,
			[69] = 12,
			[70] = 14,
			[71] = 15,
			[72] = 0,
			[73] = 1,
			[74] = 2,
			[75] = 3,
			[76] = 4,
			[77] = 5,
			[78] = 6,
			[79] = 7,
			[80] = 9,
			[81] = 11,
			[82] = 12,
			[83] = 14,
			[84] = 15,
			[85] = 0,
			[86] = 1,
			[87] = 2,
			[88] = 3,
			[89] = 4,
			[90] = 5,
			[91] = 6,
			[92] = 7,
			[93] = 9,
			[94] = 11,
			[95] = 12,
			[96] = 14,
			[97] = 15,
			[98] = 0,
			[99] = 1,
			[100] = 2,
			[101] = 3,
			[102] = 4,
			[103] = 5,
			[104] = 6,
			[105] = 7,
			[106] = 9,
			[107] = 11,
			[108] = 12,
			[109] = 14,
			[110] = 15,
			[111] = 3,
			[112] = 3,
			[113] = 3,
			[114] = 0,
			[115] = 1,
			[116] = 2,
			[117] = 3,
			[118] = 4,
			[119] = 5,
			[120] = 6,
			[121] = 7,
			[122] = 9,
			[123] = 11,
			[124] = 12,
			[125] = 14,
			[126] = 15,
			[127] = 3,
			[128] = 3,
			[132] = 129,
			[133] = 129,
			[134] = 129,
			[135] = 129,
			[136] = 129,
			[137] = 129,
			[138] = 129,
			[139] = 130,
			[140] = 130,
			[141] = 130,
			[142] = 130,
			[143] = 130,
			[144] = 130,
			[145] = 130,
			[146] = 131,
			[147] = 131,
			[148] = 131,
			[149] = 131,
			[150] = 131,
			[151] = 131,
			[152] = 131,
			[154] = 153,
			[155] = 153,
			[156] = 153,
			[157] = 153,
			[158] = 153,
			[159] = 153,
			[160] = 153,
			[162] = 161,
			[163] = 161,
			[164] = 161,
			[165] = 161,
			[166] = 161,
			[167] = 161,
			[168] = 161,
			[169] = 15,
			[170] = 15,
			[171] = 0,
			[172] = 1,
			[173] = 2,
			[174] = 3,
			[175] = 4,
			[176] = 5,
			[177] = 6,
			[178] = 7,
			[179] = 9,
			[180] = 11,
			[181] = 12,
			[182] = 14,
			[183] = 129,
			[184] = 130,
			[185] = 131,
			[186] = 153,
			[187] = 0,
			[188] = 1,
			[189] = 2,
			[190] = 3,
			[191] = 4,
			[192] = 5,
			[193] = 6,
			[194] = 7,
			[195] = 9,
			[196] = 11,
			[197] = 12,
			[198] = 14,
			[199] = 129,
			[200] = 130,
			[201] = 131,
			[202] = 153,
			[203] = 161,
			[204] = 161,
			[206] = 3,
			[207] = 3,
			[208] = 3,
			[209] = 3,
			[211] = 15,
			[212] = 0,
			[213] = 1,
			[214] = 2,
			[215] = 3,
			[216] = 4,
			[217] = 5,
			[218] = 6,
			[219] = 7,
			[220] = 9,
			[221] = 11,
			[222] = 12,
			[223] = 14,
			[224] = 129,
			[225] = 130,
			[226] = 131,
			[227] = 153,
			[228] = 161,
			[230] = 229,
			[231] = 229,
			[232] = 229,
			[233] = 229,
			[234] = 229,
			[235] = 229,
			[236] = 229,
			[237] = 229,
			[238] = 229,
			[239] = 229,
		}
	}
}

local function addNewVariation(which, gender, one, two, single)
	local where = variations[which][gender]
	if not single then
		where[one] = two
		where[two] = one
	else
		where[one] = two
	end
end

CreateThread(function()
	-- male visor/Hat variations
	addNewVariation("visor", "male", 9, 10)
	addNewVariation("visor", "male", 18, 67)
	addNewVariation("visor", "male", 82, 67)
	addNewVariation("visor", "male", 44, 45)
	addNewVariation("visor", "male", 50, 68)
	addNewVariation("visor", "male", 51, 69)
	addNewVariation("visor", "male", 52, 70)
	addNewVariation("visor", "male", 53, 71)
	addNewVariation("visor", "male", 62, 72)
	addNewVariation("visor", "male", 65, 66)
	addNewVariation("visor", "male", 73, 74)
	addNewVariation("visor", "male", 76, 77)
	addNewVariation("visor", "male", 79, 78)
	addNewVariation("visor", "male", 80, 81)
	addNewVariation("visor", "male", 91, 92)
	addNewVariation("visor", "male", 104, 105)
	addNewVariation("visor", "male", 109, 110)
	addNewVariation("visor", "male", 116, 117)
	addNewVariation("visor", "male", 118, 119)
	addNewVariation("visor", "male", 123, 124)
	addNewVariation("visor", "male", 125, 126)
	addNewVariation("visor", "male", 127, 128)
	addNewVariation("visor", "male", 130, 131)
	addNewVariation("visor", "male", 135, 136)
	addNewVariation("visor", "male", 137, 138)
	addNewVariation("visor", "male", 139, 140)
	addNewVariation("visor", "male", 142, 143)
	addNewVariation("visor", "male", 147, 148)
	addNewVariation("visor", "male", 151, 152)
	addNewVariation("visor", "male", 127, 128)
	addNewVariation("visor", "male", 130, 131)
	-- female visor/Hat variations
	addNewVariation("visor", "female", 43, 44)
	addNewVariation("visor", "female", 49, 67)
	addNewVariation("visor", "female", 64, 65)
	addNewVariation("visor", "female", 65, 64)
	addNewVariation("visor", "female", 51, 69)
	addNewVariation("visor", "female", 50, 68)
	addNewVariation("visor", "female", 52, 70)
	addNewVariation("visor", "female", 62, 71)
	addNewVariation("visor", "female", 72, 73)
	addNewVariation("visor", "female", 75, 76)
	addNewVariation("visor", "female", 78, 77)
	addNewVariation("visor", "female", 79, 80)
	addNewVariation("visor", "female", 18, 66)
	addNewVariation("visor", "female", 66, 81)
	addNewVariation("visor", "female", 81, 66)
	addNewVariation("visor", "female", 86, 84)
	addNewVariation("visor", "female", 90, 91)
	addNewVariation("visor", "female", 103, 104)
	addNewVariation("visor", "female", 108, 109)
	addNewVariation("visor", "female", 115, 116)
	addNewVariation("visor", "female", 117, 118)
	addNewVariation("visor", "female", 122, 123)
	addNewVariation("visor", "female", 124, 125)
	addNewVariation("visor", "female", 126, 127)
	addNewVariation("visor", "female", 129, 130)
	addNewVariation("visor", "female", 134, 135)
	addNewVariation("visor", "female", 136, 137)
	addNewVariation("visor", "female", 138, 139)
	addNewVariation("visor", "female", 141, 142)
	addNewVariation("visor", "female", 146, 147)
	addNewVariation("visor", "female", 150, 151)
	-- male bags
	addNewVariation("bags", "male", 45, 44)
	addNewVariation("bags", "male", 41, 40)
	addNewVariation("bags", "male", 82, 81)
	addNewVariation("bags", "male", 86, 85)
	-- female bags
	addNewVariation("bags", "female", 45, 44)
	addNewVariation("bags", "female", 41, 40)
	addNewVariation("bags", "female", 82, 81)
	addNewVariation("bags", "female", 86, 85)
	-- male hair
	addNewVariation("hair", "male", 7, 15, true)
	addNewVariation("hair", "male", 43, 15, true)
	addNewVariation("hair", "male", 9, 43, true)
	addNewVariation("hair", "male", 11, 43, true)
	addNewVariation("hair", "male", 15, 43, true)
	addNewVariation("hair", "male", 16, 43, true)
	addNewVariation("hair", "male", 17, 43, true)
	addNewVariation("hair", "male", 20, 43, true)
	addNewVariation("hair", "male", 22, 43, true)
	addNewVariation("hair", "male", 45, 43, true)
	addNewVariation("hair", "male", 47, 43, true)
	addNewVariation("hair", "male", 49, 43, true)
	addNewVariation("hair", "male", 51, 43, true)
	addNewVariation("hair", "male", 52, 43, true)
	addNewVariation("hair", "male", 53, 43, true)
	addNewVariation("hair", "male", 56, 43, true)
	addNewVariation("hair", "male", 58, 43, true)
	-- female hair
	addNewVariation("hair", "female", 1, 49, true)
	addNewVariation("hair", "female", 2, 49, true)
	addNewVariation("hair", "female", 7, 49, true)
	addNewVariation("hair", "female", 9, 49, true)
	addNewVariation("hair", "female", 10, 49, true)
	addNewVariation("hair", "female", 11, 48, true)
	addNewVariation("hair", "female", 14, 53, true)
	addNewVariation("hair", "female", 15, 42, true)
	addNewVariation("hair", "female", 21, 42, true)
	addNewVariation("hair", "female", 23, 42, true)
	addNewVariation("hair", "female", 31, 53, true)
	addNewVariation("hair", "female", 39, 49, true)
	addNewVariation("hair", "female", 40, 49, true)
	addNewVariation("hair", "female", 42, 53, true)
	addNewVariation("hair", "female", 45, 49, true)
	addNewVariation("hair", "female", 48, 49, true)
	addNewVariation("hair", "female", 49, 48, true)
	addNewVariation("hair", "female", 52, 53, true)
	addNewVariation("hair", "female", 53, 42, true)
	addNewVariation("hair", "female", 54, 55, true)
	addNewVariation("hair", "female", 59, 42, true)
	addNewVariation("hair", "female", 59, 54, true)
	addNewVariation("hair", "female", 68, 53, true)
	addNewVariation("hair", "female", 76, 48, true)
	-- male Top/Jacket variations
	addNewVariation("jackets", "male", 29, 30)
	addNewVariation("jackets", "male", 31, 32)
	addNewVariation("jackets", "male", 42, 43)
	addNewVariation("jackets", "male", 59, 60)
	addNewVariation("jackets", "male", 68, 69)
	addNewVariation("jackets", "male", 74, 75)
	addNewVariation("jackets", "male", 87, 88)
	addNewVariation("jackets", "male", 93, 94)
	addNewVariation("jackets", "male", 99, 100)
	addNewVariation("jackets", "male", 101, 102)
	addNewVariation("jackets", "male", 103, 104)
	addNewVariation("jackets", "male", 126, 127)
	addNewVariation("jackets", "male", 129, 130)
	addNewVariation("jackets", "male", 131, 132)
	addNewVariation("jackets", "male", 184, 185)
	addNewVariation("jackets", "male", 188, 189)
	addNewVariation("jackets", "male", 194, 195)
	addNewVariation("jackets", "male", 196, 197)
	addNewVariation("jackets", "male", 198, 199)
	addNewVariation("jackets", "male", 200, 203)
	addNewVariation("jackets", "male", 202, 205)
	addNewVariation("jackets", "male", 206, 207)
	addNewVariation("jackets", "male", 209, 212)
	addNewVariation("jackets", "male", 210, 211)
	addNewVariation("jackets", "male", 217, 218)
	addNewVariation("jackets", "male", 229, 230)
	addNewVariation("jackets", "male", 232, 233)
	addNewVariation("jackets", "male", 235, 236)
	addNewVariation("jackets", "male", 241, 242)
	addNewVariation("jackets", "male", 251, 253)
	addNewVariation("jackets", "male", 256, 261)
	addNewVariation("jackets", "male", 262, 263)
	addNewVariation("jackets", "male", 265, 266)
	addNewVariation("jackets", "male", 267, 268)
	addNewVariation("jackets", "male", 279, 280)
	addNewVariation("jackets", "male", 292, 293)
	addNewVariation("jackets", "male", 294, 295)
	addNewVariation("jackets", "male", 296, 297)
	addNewVariation("jackets", "male", 300, 303)
	addNewVariation("jackets", "male", 301, 302)
	addNewVariation("jackets", "male", 305, 306)
	addNewVariation("jackets", "male", 311, 312)
	addNewVariation("jackets", "male", 300, 303)
	addNewVariation("jackets", "male", 301, 302)
	addNewVariation("jackets", "male", 305, 306)
	addNewVariation("jackets", "male", 311, 312)
	addNewVariation("jackets", "male", 314, 315)
	addNewVariation("jackets", "male", 316, 317)
	addNewVariation("jackets", "male", 318, 319)
	addNewVariation("jackets", "male", 321, 322)
	addNewVariation("jackets", "male", 330, 331)
	addNewVariation("jackets", "male", 336, 337)
	addNewVariation("jackets", "male", 339, 126)
	addNewVariation("jackets", "male", 340, 341)
	addNewVariation("jackets", "male", 343, 344)
	addNewVariation("jackets", "male", 346, 234)
	addNewVariation("jackets", "male", 347, 260)
	addNewVariation("jackets", "male", 348, 349)
	addNewVariation("jackets", "male", 352, 353)
	addNewVariation("jackets", "male", 354, 355)
	addNewVariation("jackets", "male", 359, 360)
	-- female Top/Jacket variations
	addNewVariation("jackets", "female", 53, 52)
	addNewVariation("jackets", "female", 57, 58)
	addNewVariation("jackets", "female", 62, 63)
	addNewVariation("jackets", "female", 84, 85)
	addNewVariation("jackets", "female", 90, 91)
	addNewVariation("jackets", "female", 92, 93)
	addNewVariation("jackets", "female", 94, 95)
	addNewVariation("jackets", "female", 117, 118)
	addNewVariation("jackets", "female", 120, 121)
	addNewVariation("jackets", "female", 128, 129)
	addNewVariation("jackets", "female", 187, 186)
	addNewVariation("jackets", "female", 190, 191)
	addNewVariation("jackets", "female", 196, 197)
	addNewVariation("jackets", "female", 198, 199)
	addNewVariation("jackets", "female", 200, 201)
	addNewVariation("jackets", "female", 202, 205)
	addNewVariation("jackets", "female", 204, 207)
	addNewVariation("jackets", "female", 210, 211)
	addNewVariation("jackets", "female", 213, 216)
	addNewVariation("jackets", "female", 214, 215)
	addNewVariation("jackets", "female", 225, 226)
	addNewVariation("jackets", "female", 227, 228)
	addNewVariation("jackets", "female", 239, 240)
	addNewVariation("jackets", "female", 242, 243)
	addNewVariation("jackets", "female", 244, 364)
	addNewVariation("jackets", "female", 245, 246)
	addNewVariation("jackets", "female", 249, 250)
	addNewVariation("jackets", "female", 259, 261)
	addNewVariation("jackets", "female", 265, 270)
	addNewVariation("jackets", "female", 271, 272)
	addNewVariation("jackets", "female", 274, 275)
	addNewVariation("jackets", "female", 276, 277)
	addNewVariation("jackets", "female", 280, 281)
	addNewVariation("jackets", "female", 292, 293)
	addNewVariation("jackets", "female", 305, 306)
	addNewVariation("jackets", "female", 307, 308)
	addNewVariation("jackets", "female", 311, 314)
	addNewVariation("jackets", "female", 312, 313)
	addNewVariation("jackets", "female", 316, 317)
	addNewVariation("jackets", "female", 325, 326)
	addNewVariation("jackets", "female", 327, 328)
	addNewVariation("jackets", "female", 329, 330)
	addNewVariation("jackets", "female", 332, 333)
	addNewVariation("jackets", "female", 339, 340)
	addNewVariation("jackets", "female", 345, 346)
	addNewVariation("jackets", "female", 351, 352)
	addNewVariation("jackets", "female", 354, 121)
	addNewVariation("jackets", "female", 355, 356)
	addNewVariation("jackets", "female", 357, 359)
	addNewVariation("jackets", "female", 358, 360)
	addNewVariation("jackets", "female", 362, 363)
	addNewVariation("jackets", "female", 366, 367)
	addNewVariation("jackets", "female", 365, 269)
	addNewVariation("jackets", "female", 370, 371)
	addNewVariation("jackets", "female", 372, 373)
	addNewVariation("jackets", "female", 378, 379)
end)

local drawables = {
	["Top"] = {
		Drawable = 11,
		Table = variations.jackets,
		Emote = {Dict = "missmic4", Anim = "michael_tux_fidget", Move = 51, Dur = 1500}
	},
	["Gloves"] = {
		Drawable = 3,
		Table = variations.gloves,
		Remember = true,
		Emote = {Dict = "nmt_3_rcm-10", Anim = "cs_nigel_dual-10", Move = 51, Dur = 1200}
	},
	["Shoes"] = {
		Drawable = 6,
		Table = {Standalone = true, male = 34, female = 35},
		Emote = {Dict = "random@domestic", Anim = "pickup_low", Move = 0, Dur = 1200}
	},
	["Neck"] = {
		Drawable = 7,
		Table = {Standalone = true, male = 0, female = 0 },
		Emote = {Dict = "clothingtie", Anim = "try_tie_positive_a", Move = 51, Dur = 2100}
	},
	["Vest"] = {
		Drawable = 9,
		Table = {Standalone = true, male = 0, female = 0 },
		Emote = {Dict = "clothingtie", Anim = "try_tie_negative_a", Move = 51, Dur = 1200}
	},
	["Bag"] = {
		Drawable = 5,
		Table = variations.bags,
		Emote = {Dict = "anim@heists@ornate_bank@grab_cash", Anim = "intro", Move = 51, Dur = 1600}
	},
	["Mask"] = {
		Drawable = 1,
		Table = {Standalone = true, male = 0, female = 0 },
		Emote = {Dict = "mp_masks@standard_car@ds@", Anim = "put_on_mask", Move = 51, Dur = 800}
	},
	["Hair"] = {
		Drawable = 2,
		Table = variations.hair,
		Remember = true,
		Emote = {Dict = "clothingtie", Anim = "check_out_a", Move = 51, Dur = 2000}
	},
}

local Extras = {
	["Shirt"] = {
		Drawable = 11,
		Table = {
			Standalone = true, male = 252, female = 74,
			Extra = {
				{Drawable = 8, Id = 15, Tex = 0, Name = "Extra Undershirt"},
				{Drawable = 3, Id = 15, Tex = 0, Name = "Extra Gloves"},
				{Drawable = 10, Id = 0, Tex = 0, Name = "Extra Decals"},
				}
			},
		Emote = {Dict = "clothingtie", Anim = "try_tie_negative_a", Move = 51, Dur = 1200}
	},
	["Pants"] = {
		Drawable = 4,
		Table = {Standalone = true, male = 61, female = 14},
		Emote = {Dict = "re@construction", Anim = "out_of_breath", Move = 51, Dur = 1300}
	},
	["Bagoff"] = {
		Drawable = 5,
		Table = {Standalone = true, male = 0, female = 0},
		Emote = {Dict = "clothingtie", Anim = "try_tie_negative_a", Move = 51, Dur = 1200}
	},
}

local Props = {
	["Visor"] = {
		Prop = 0,
		Variants = variations.visor,
		Emote = {
			On = {Dict = "mp_masks@standard_car@ds@", Anim = "put_on_mask", Move = 51, Dur = 600},
			Off = {Dict = "missheist_agency2ahelmet", Anim = "take_off_helmet_stand", Move = 51, Dur = 1200}
		}
	},
	["Hat"] = {
		Prop = 0,
		Emote = {
			On = {Dict = "mp_masks@standard_car@ds@", Anim = "put_on_mask", Move = 51, Dur = 600},
			Off = {Dict = "missheist_agency2ahelmet", Anim = "take_off_helmet_stand", Move = 51, Dur = 1200}
		}
	},
	["Glasses"] = {
		Prop = 1,
		Emote = {
			On = {Dict = "clothingspecs", Anim = "take_off", Move = 51, Dur = 1400},
			Off = {Dict = "clothingspecs", Anim = "take_off", Move = 51, Dur = 1400}
		}
	},
	["Ear"] = {
		Prop = 2,
		Emote = {
			On = {Dict = "mp_cp_stolen_tut", Anim = "b_think", Move = 51, Dur = 900},
			Off = {Dict = "mp_cp_stolen_tut", Anim = "b_think", Move = 51, Dur = 900}
		}
	},
	["Watch"] = {
		Prop = 6,
		Emote = {
			On = {Dict = "nmt_3_rcm-10", Anim = "cs_nigel_dual-10", Move = 51, Dur = 1200},
			Off = {Dict = "nmt_3_rcm-10", Anim = "cs_nigel_dual-10", Move = 51, Dur = 1200}
		}
	},
	["Bracelet"] = {
		Prop = 7,
		Emote = {
			On = {Dict = "nmt_3_rcm-10", Anim = "cs_nigel_dual-10", Move = 51, Dur = 1200},
			Off = {Dict = "nmt_3_rcm-10", Anim = "cs_nigel_dual-10", Move = 51, Dur = 1200}
		}
	},
}

LastEquipped = {}
Cooldown = false

local function PlayToggleEmote(e, cb)
	lib.requestAnimDict(e.Dict)
	if cache.vehicle then e.Move = 51 end
	TaskPlayAnim(cache.ped, e.Dict, e.Anim, 3.0, 3.0, e.Dur, e.Move, 0, false, false, false)
	local Pause = e.Dur - 500
	Pause = Pause < 500 and 500 or Pause
	IncurCooldown(Pause)
	Wait(Pause) -- Lets wait for the emote to play for a bit then do the callback.
	cb()
end

function ResetClothing(anim)
	if type(anim) == "table" then
		anim = true
	end
	local e = drawables.Top.Emote
	if anim then TaskPlayAnim(cache.ped, e.Dict, e.Anim, 3.0, 3.0, 3000, e.Move, 0, false, false, false) end
	for _, v in pairs(LastEquipped) do
		if v then
			if v.Drawable then SetPedComponentVariation(cache.ped, v.Id, v.Drawable, v.Texture, 0)
			elseif v.Prop then ClearPedProp(cache.ped, v.Id) SetPedPropIndex(cache.ped, v.Id, v.Prop, v.Texture, true) end
		end
	end
	LastEquipped = {}
end

RegisterNetEvent('qb-radialmenu:ResetClothing', ResetClothing)

function ToggleClothing(data)
	local which = data.id or data[1]
	local extra = data.extra
    if which == "Shirt" or which == "Pants" or which == "Bagoff" then
        extra = true
    end
	if Cooldown then return end
	local Toggle = drawables[which]
	if extra then Toggle = Extras[which] end
	local Cur = { -- Lets check what we are currently wearing.
		Drawable = GetPedDrawableVariation(cache.ped, Toggle.Drawable),
		Id = Toggle.Drawable,
		Ped = cache.ped,
		Texture = GetPedTextureVariation(cache.ped, Toggle.Drawable),
	}
	local Gender = IsMpPed(cache.ped)
	if which ~= "Mask" then
		if not Gender then Notify(Lang:t("info.wrong_ped")) return false end -- We cancel the command here if the person is not using a multiplayer model.
	end
	local Table = Toggle.Table[Gender]
	if not Toggle.Table.Standalone then -- "Standalone" is for things that dont require a variant, like the shoes just need to be switched to a specific drawable. Looking back at this i should have planned ahead, but it all works so, meh!
		for k,v in pairs(Table) do
			if not Toggle.Remember then
				if k == Cur.Drawable then
					PlayToggleEmote(Toggle.Emote, function() SetPedComponentVariation(cache.ped, Toggle.Drawable, v, Cur.Texture, 0) end) return true
				end
			else
				if not LastEquipped[which] then
					if k == Cur.Drawable then
						PlayToggleEmote(Toggle.Emote, function() LastEquipped[which] = Cur SetPedComponentVariation(cache.ped, Toggle.Drawable, v, Cur.Texture, 0) end) return true
					end
				else
					local Last = LastEquipped[which]
					PlayToggleEmote(Toggle.Emote, function() SetPedComponentVariation(cache.ped, Toggle.Drawable, Last.Drawable, Last.Texture, 0) LastEquipped[which] = false end) return true
				end
			end
		end
		Notify(Lang:t("info.no_variants")) return
	else
		if not LastEquipped[which] then
			if Cur.Drawable ~= Table then
				PlayToggleEmote(Toggle.Emote, function()
					LastEquipped[which] = Cur
					SetPedComponentVariation(cache.ped, Toggle.Drawable, Table, 0, 0)
					if Toggle.Table.Extra then
						local extraToggled = Toggle.Table.Extra
						for _, v in pairs(extraToggled) do
							local ExtraCur = {Drawable = GetPedDrawableVariation(cache.ped, v.Drawable),  Texture = GetPedTextureVariation(cache.ped, v.Drawable), Id = v.Drawable}
							SetPedComponentVariation(cache.ped, v.Drawable, v.Id, v.Tex, 0)
							LastEquipped[v.Name] = ExtraCur
						end
					end
				end)
				return true
			end
		else
			local Last = LastEquipped[which]
			PlayToggleEmote(Toggle.Emote, function()
				SetPedComponentVariation(cache.ped, Toggle.Drawable, Last.Drawable, Last.Texture, 0)
				LastEquipped[which] = false
				if Toggle.Table.Extra then
					local extraToggled = Toggle.Table.Extra
					for _, v in pairs(extraToggled) do
						if LastEquipped[v.Name] then
							Last = LastEquipped[v.Name]
							SetPedComponentVariation(cache.ped, Last.Id, Last.Drawable, Last.Texture, 0)
							LastEquipped[v.Name] = false
						end
					end
				end
			end)
			return true
		end
	end
	Notify(Lang:t("info.already_wearing")) return false
end

RegisterNetEvent('qb-radialmenu:ToggleClothing', ToggleClothing)

function ToggleProps(id)
	if Cooldown then return end
	local Prop = Props[id] or Props[id[1]]
	local Cur = { -- Lets get out currently equipped prop.
		Id = Prop.Prop,
		Ped = cache.ped,
		Prop = GetPedPropIndex(cache.ped, Prop.Prop),
		Texture = GetPedPropTextureIndex(cache.ped, Prop.Prop),
	}
	if not Prop.Variants then
		if Cur.Prop ~= -1 then -- If we currently are wearing this prop, remove it and save the one we were wearing into the LastEquipped table.
			PlayToggleEmote(Prop.Emote.Off, function() LastEquipped[id] = Cur ClearPedProp(cache.ped, Prop.Prop) end) return true
		else
			local Last = LastEquipped[id] -- Detect that we have already taken our prop off, lets put it back on.
			if Last then
				PlayToggleEmote(Prop.Emote.On, function() SetPedPropIndex(cache.ped, Prop.Prop, Last.Prop, Last.Texture, true) end) LastEquipped[id] = false return true
			end
		end
		Notify(Lang:t("info.nothing_to_remove")) return false
	else
		local Gender = IsMpPed(cache.ped)
		if not Gender then Notify(Lang:t("info.wrong_ped")) return false end -- We dont really allow for variants on ped models, Its possible, but im pretty sure 95% of ped models dont really have variants.
		variations = Prop.Variants[Gender]
		for k,v in pairs(variations) do
			if Cur.Prop == k then
				PlayToggleEmote(Prop.Emote.On, function() SetPedPropIndex(cache.ped, Prop.Prop, v, Cur.Texture, true) end) return true
			end
		end
		Notify(Lang:t("info.no_variants")) return false
	end
end

RegisterNetEvent('qb-radialmenu:ToggleProps', ToggleProps)

for k,v in pairs(Config.Commands) do
	RegisterCommand(k, v.Func, false)
	--log("Created /"..k.." ("..v.Desc..")") -- Useful for translation checking.
	TriggerEvent("chat:addSuggestion", "/"..k, v.Desc)
	TriggerEvent("chat:addSuggestion", k, v.Desc)
end

if Config.ExtrasEnabled then
	for k,v in pairs(Config.ExtraCommands) do
		RegisterCommand(k, v.Func, false)
		--log("Created /"..k.." ("..v.Desc..")") -- Useful for translation checking.
		TriggerEvent("chat:addSuggestion", "/"..k, v.Desc)
		-- TriggerEvent("chat:addSuggestion", k, v.Desc)
	end
end

AddEventHandler('onResourceStop', function(resource) -- Mostly for development, restart the resource and it will put all the clothes back on.
	if resource == GetCurrentResourceName() then
		ResetClothing()
	end
end)

function IncurCooldown(ms)
	CreateThread(function()
		Cooldown = true Wait(ms) Cooldown = false
	end)
end

function Notify(message, color) -- However you want your notifications to be shown, you can switch it up here.
	QBCore.Functions.Notify(message, color)
end

function IsMpPed(ped)
	local male = `mp_m_freemode_01` local female = `mp_f_freemode_01`
	local CurrentModel = GetEntityModel(ped)
	if CurrentModel == male then return "male" elseif CurrentModel == female then return "female" else return false end
end

RegisterNetEvent('dpc:EquipLast', function()
	for _, v in pairs(LastEquipped) do
		if v then
			if v.Drawable then SetPedComponentVariation(cache.ped, v.ID, v.Drawable, v.Texture, 0)
			elseif v.Prop then ClearPedProp(cache.ped, v.ID) SetPedPropIndex(cache.ped, v.ID, v.Prop, v.Texture, true) end
		end
	end
	LastEquipped = {}
end)

RegisterNetEvent('dpc:ResetClothing', function()
	LastEquipped = {}
end)
