LevelCreator.cs
global using Sandbox;
global using System;
global using System.Collections.Generic;
global using System.Linq;

public class LevelCreator
{
	public static List<CardType> GetCardTypesForLevel(int levelNum)
	{
		List<CardType> cardTypes = null;

		switch ( levelNum )
		{
			case 0:
				cardTypes = new List<CardType>() {
					CardType.King,
					CardType.Wizard,
					CardType.Police,
					CardType.Ogre,
					CardType.Clown,
					CardType.Rock,
					CardType.JumpingSpider,
					CardType.Candle,
					CardType.Skunk,
					CardType.CarePackage,
					CardType.Cash,
					CardType.Steak,
					CardType.Cockroach,
					//CardType.Key,
					//CardType.ATM,
					CardType.Donut,
					CardType.Cheese,
					CardType.Taco,
					CardType.Burrito,
					CardType.Syringe,
					CardType.Crab,
					CardType.MagicWand,
					CardType.Carrot,
					CardType.Caterpillar,
					CardType.Tornado,

					//CardType.Map,
					//CardType.Cellphone,
					//CardType.Bank,
					//CardType.Coin,
					//CardType.Stethoscope,
					//CardType.Rose,
					//CardType.Bomb,
					//CardType.AncientScroll,
					//CardType.Mirror,
					//CardType.Vampire,
					//CardType.Wine,
					//CardType.FlyingMoney,
					//CardType.Bear,
					//CardType.Apple,
					//CardType.Ninja,
					//CardType.FortuneCookie,
					//CardType.Bento,
					//CardType.Teacher,
					//CardType.Tractor,
					//CardType.Compass,
					//CardType.Juggler,
					//CardType.Flashlight,
					//CardType.Genie,
					//CardType.AlarmClock,
					//CardType.Magnet,

					//CardType.StockMarket,
					//CardType.Helicopter,
					//CardType.UFO,
					//CardType.FaxMachine,
					//CardType.Dice,
					//CardType.Broccoli,
					//CardType.Snake,
					//CardType.Dolphin,
					//CardType.Detective,
					//CardType.Potion,
					//CardType.Coffee,
					//CardType.Dancer,
					//CardType.Bell,
					//CardType.Umbrella,
					//CardType.Telephone,
					//CardType.Compass,
					//CardType.CrystalBall,
					//CardType.Twins,
					//CardType.Rocket,
					//CardType.Apple,
					//CardType.Tree,
					//CardType.Pawn,
					//CardType.Trumpet,
					//CardType.Bodybuilder,
					//CardType.Chipmunk,

					//CardType.Coin,
					//CardType.Antenna,
					//CardType.Raccoon,
					//CardType.Microwave,
					//CardType.Balloon,
				};
				break;

			case 1: // FOREST
				cardTypes = new List<CardType>
				{
					//(Game.Random.Int( 0, 4 ) == 0 ? CardType.Bear : CardType.Tree),
					CardType.Tree,
					CardType.Apple,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal3] <= 4 ? CardType.BirthdayCake : CardType.Apple),
					((int)Manager.Instance.Stats[StatType.CardSpawnVal3] <= 4 ? (Game.Random.Int( 0, 1 ) == 0 ? (Game.Random.Int( 0, 1 ) == 0 ? CardType.Magnet : CardType.Pawn) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Chipmunk : CardType.Rocket)) : CardType.Coin),

					//CardType.Coin,
					(Game.Random.Int(0, 4) == 0 ? CardType.Compass : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Spider : CardType.Snake)),
					(Game.Random.Int(0, 4) == 0 ? CardType.Balloon : (Game.Random.Int( 0, 1 ) == 0 ? (Game.Random.Int( 0, 6 ) == 0 ? CardType.Crab : CardType.Ant) : CardType.Rock)),
				};

				break;

			case 2: // FOREST
				cardTypes = new List<CardType>
				{
					CardType.Ogre,
					CardType.Tree, //CardType.Apple,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal4] <= 3 ? CardType.BirthdayCake : CardType.Apple),
					((int)Manager.Instance.Stats[StatType.CardSpawnVal4] <= 3 ? (Game.Random.Int( 0, 1 ) == 0 ? (Game.Random.Int( 0, 1 ) == 0 ? CardType.Flashlight : CardType.Telephone) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Chipmunk : CardType.Juggler)) : CardType.Coin),
					//CardType.Coin,

					CardType.Chipmunk,
					(Game.Random.Int( 0, 1 ) == 0 ? CardType.Compass : CardType.Trumpet),
					(Game.Random.Int( 0, 1 ) == 0 ? CardType.Bear : CardType.Raccoon),
					(Game.Random.Int( 0, 10 ) == 0 ? (Game.Random.Int( 0, 2 ) == 0 ? CardType.Skunk : CardType.Cockroach) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Spider : CardType.Snake)),
					(Game.Random.Int( 0, 4 ) == 0 ? CardType.Balloon : (Game.Random.Int( 0, 1 ) == 0 ? (Game.Random.Int( 0, 6 ) == 0 ? CardType.Crab : CardType.Ant) : CardType.Rock)),
				};

				break;

			case 3: // CONSPIRACY
				cardTypes = new List<CardType>()
				{
					((int)Manager.Instance.Stats[StatType.CardSpawnVal5] < 5 ? CardType.Coffee: CardType.Apple),
					//CardType.Donut,
					(Game.Random.Int( 0, 1 ) == 0 ? CardType.Broccoli : CardType.Donut),
					(Game.Random.Int( 0, 1 ) == 0 ? CardType.Coin : CardType.Cash),
					CardType.Dice,

					CardType.Flashlight,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal2] < 5 ? CardType.Tractor: CardType.Tornado),
					(Game.Random.Int( 0, 2 ) == 0 ? CardType.Mountain : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Antenna : CardType.Twins)),
					(Game.Random.Int( 0, 2 ) == 0 ? (Game.Random.Int( 0, 5 ) == 0 ? CardType.Cockroach : CardType.Rock) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Rocket : CardType.Ninja)),
					((int)Manager.Instance.Stats[StatType.CardSpawnVal2] % 2 == 0 ? CardType.Bomb : CardType.UFO),
				};
				break;

			case 4: // CONSPIRACY
				cardTypes = new List<CardType>()
				{
					CardType.Clown,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal5] >= 5 ? CardType.Coffee: CardType.Apple),
					//CardType.Coffee,
					//CardType.BirthdayCake,
					//CardType.Donut,
					CardType.RedEnvelope,

					((int)Manager.Instance.Stats[StatType.CardSpawnVal2] % 2 == 1 ? CardType.Bomb : CardType.UFO),
					CardType.Detective,
					CardType.Flashlight,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal2] >= 5 ? CardType.Tractor: CardType.Tornado),
					CardType.Broccoli,

					(Game.Random.Int( 0, 2 ) == 0 ? CardType.Mountain : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Antenna : CardType.Twins)),
					//(Game.Random.Int( 0, 2 ) == 0 ? (Game.Random.Int( 0, 1 ) == 0 ? CardType.Juggler : CardType.Rock) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Rocket : CardType.Ninja)),
				};
				break;

			case 5: // CORPORATE
				cardTypes = new List<CardType>()
				{
					CardType.FlyingMoney,
					//CardType.Taco,
					//CardType.Bento,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal8] % 2 == 0 ? CardType.Bento : CardType.Taco),
					CardType.FortuneCookie,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal1] % 2 == 0 ? CardType.Cheese : CardType.Umbrella),

					(Game.Random.Int( 0, 4 ) == 0 ? CardType.Bodybuilder : CardType.Magnet ),
					(Game.Random.Int( 0, 1 ) == 0 ? CardType.Helicopter : CardType.Juggler),
					((int)Manager.Instance.Stats[StatType.CardSpawnVal0] % 2 == 0 ? CardType.Cellphone : CardType.FaxMachine),
					((int)Manager.Instance.Stats[StatType.CardSpawnVal5] % 2 == 0 ? CardType.Microwave : CardType.CarePackage),
					(Game.Random.Int( 0, 1 ) == 0 ? CardType.Balloon : CardType.Rock),

					//((int)Manager.Instance.Stats[StatType.CardSpawnVal6] > 5 ? CardType.ATM : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Cash : CardType.DiamondRing) ),
					//(Game.Random.Int( 0, 1 ) == 0 ? CardType.Umbrella : CardType.Bodybuilder),
				};
				break;

			case 6: // CORPORATE
				cardTypes = new List<CardType>()
				{
					CardType.Police, //CardType.Key,
					//CardType.Taco,
					CardType.Broccoli,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal8] % 2 == 1 ? CardType.Bento : CardType.Taco),
					CardType.FortuneCookie,
					//((int)Manager.Instance.Stats[StatType.CardSpawnVal6] <= 5 ? CardType.ATM : (Game.Random.Int( 0, 1 ) == 0 ? CardType.FlyingMoney : CardType.DiamondRing) ),

					((int)Manager.Instance.Stats[StatType.CardSpawnVal1] % 2 == 1 ? CardType.Cheese : CardType.Umbrella),
					//CardType.Magnet,
					(Game.Random.Int( 0, 1 ) == 0 ? CardType.Helicopter : CardType.Juggler),
					(Game.Random.Int(0, 1) == 0 ? (Game.Random.Int( 0, 1 ) == 0 ? CardType.Rabbit : CardType.Map) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Compass : CardType.Balloon)),
					//CardType.Coin,

					//CardType.Bank,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal0] % 2 == 1 ? CardType.Cellphone : CardType.FaxMachine),
					((int)Manager.Instance.Stats[StatType.CardSpawnVal5] % 2 == 1 ? CardType.Microwave : CardType.CarePackage),
					//(Game.Random.Int( 0, 1 ) == 0 ? CardType.Magnet : CardType.Bodybuilder),
					(Game.Random.Int(0, 1) == 0 ? (Game.Random.Int( 0, 1 ) == 0 ? CardType.Coin : CardType.Cash) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.FlyingMoney : CardType.DiamondRing)),
					//CardType.Bodybuilder,
					//(Game.Random.Int( 0, 1 ) == 0 ? CardType.Umbrella : CardType.Bodybuilder),

					// todo: needs money
				};
				break;

			case 7: // GOTHIC
				cardTypes = new List<CardType>()
				{
					//CardType.Dancer,
					//CardType.Maracas,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal8] < 5 ? CardType.CrystalBall : CardType.Bell),
					//CardType.Bell,
					(Game.Random.Int( 0, 1 ) == 0 ? CardType.Compass : CardType.Flashlight),
					CardType.Rock,

					CardType.Pickaxe,
					//CardType.Wine,
					CardType.Burrito,
					CardType.Rabbit,
					//CardType.Telephone,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal7] >= 5 ? CardType.Telephone : CardType.Maracas),

					CardType.BirthdayCake,
					(Game.Random.Int(0, 1) == 0 ? (Game.Random.Int( 0, 1 ) == 0 ? CardType.Coin : CardType.Cash) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.FlyingMoney : CardType.DiamondRing)),
					(Game.Random.Int( 0, 2 ) == 0 ? CardType.Tractor : CardType.Stethoscope),
					(Game.Random.Int(0, 1) == 0 ? (Game.Random.Int( 0, 1 ) == 0 ? CardType.Balloon : CardType.Pawn) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Magnet : CardType.Bodybuilder)),
					CardType.Map,

					//CardType.Vampire,
				};
				break;

			case 8: // GOTHIC
				cardTypes = new List<CardType>()
				{
					CardType.King,
					//CardType.Maracas,
					CardType.Wine,
					(Game.Random.Int(0, 1) == 0 ? (Game.Random.Int( 0, 1 ) == 0 ? CardType.Broccoli : CardType.Donut) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Bento : CardType.Coffee)),
					CardType.Coin,

					//CardType.Bell,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal8] >= 5 ? CardType.CrystalBall : CardType.Bell),
					CardType.Dancer,
					//(Game.Random.Int( 0, 1 ) == 0 ? CardType.Trumpet : CardType.Dolphin),

					//CardType.Vampire,
					//CardType.Telephone,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal7] >= 5 ? CardType.Telephone : CardType.Maracas),
					//(Game.Random.Int(0, 1) == 0 ? (Game.Random.Int( 0, 1 ) == 0 ? CardType.Rabbit : CardType.Umbrella) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Ninja : CardType.Caterpillar)),
					(Game.Random.Int( 0, 1 ) == 0 ? CardType.Compass : CardType.Flashlight),
					(Game.Random.Int(0, 1) == 0 ? (Game.Random.Int( 0, 1 ) == 0 ? CardType.Cash : CardType.Bank) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.DiamondRing : CardType.FlyingMoney)),

					(Game.Random.Int(0, 2) == 0 ? CardType.Balloon : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Rock : CardType.Pawn)),
					CardType.Syringe,
					(Game.Random.Int( 0, 2 ) == 0 ? CardType.Bomb : CardType.Map),
				};
				break;

			case 9: // FANTASY
				cardTypes = new List<CardType>()
				{
					CardType.Candle,
					CardType.Carrot,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal6] % 2 == 0 ? CardType.Potion : CardType.Dolphin),
					CardType.Pawn,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal9] % 2 == 0 ? CardType.AncientScroll : CardType.Vampire),

					CardType.Rock,
					CardType.Pickaxe,
					CardType.Genie,
					CardType.MagicWand,
					CardType.Coin,

					CardType.Steak,
					(Game.Random.Int( 0, 3 ) == 0 ? CardType.JumpingSpider : (Game.Random.Int( 0, 3 ) == 0 ? CardType.Ant : CardType.Crab)),
					((int)Manager.Instance.Stats[StatType.CardSpawnVal7] % 2 == 1 ? CardType.Caterpillar : (Game.Random.Int( 0, 2 ) == 0 ? CardType.Skunk : CardType.Teacher) ),
					(Game.Random.Int( 0, 2 ) == 0 ? CardType.Compass : (Game.Random.Int( 0, 3 ) == 0 ? CardType.Raccoon : CardType.Snake)),

					//CardType.CrystalBall,
					//((int)Manager.Instance.Stats[StatType.CardSpawnVal9] < 5 ? CardType.Genie : CardType.MagicWand),
					//CardType.JumpingSpider,
				};
				break;

			case 10: // FANTASY
				cardTypes = new List<CardType>()
				{
					CardType.Wizard,
					CardType.Candle,
					(Game.Random.Int(0, 1) == 0 ? (Game.Random.Int( 0, 1 ) == 0 ? CardType.Cheese : CardType.Wine) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Broccoli : CardType.Coffee)),
					((int)Manager.Instance.Stats[StatType.CardSpawnVal9] % 2 == 1 ? CardType.AncientScroll : CardType.Vampire),
					(Game.Random.Int( 0, 2 ) == 0 ? CardType.Balloon : CardType.Pawn),

					//CardType.Steak,
					(Game.Random.Int( 0, 1 ) == 0 ? CardType.Compass : CardType.Flashlight),
					CardType.Carrot,
					((int)Manager.Instance.Stats[StatType.CardSpawnVal7] % 2 == 1 ? CardType.Caterpillar : (Game.Random.Int( 0, 2 ) == 0 ? CardType.Skunk : CardType.Rabbit) ),
					(Game.Random.Int(0, 1) == 0 ? (Game.Random.Int( 0, 1 ) == 0 ? CardType.Ant : CardType.Rock) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Magnet : CardType.Bodybuilder)),
					CardType.MagicWand,

					((int)Manager.Instance.Stats[StatType.CardSpawnVal6] % 2 == 1 ? CardType.Potion : CardType.Dolphin),
					CardType.Genie,
					CardType.Rose,
					CardType.Mirror,
					(Game.Random.Int(0, 1) == 0 ? (Game.Random.Int( 0, 1 ) == 0 ? CardType.Juggler : CardType.Teacher) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Tractor : CardType.UFO)),

					(Game.Random.Int(0, 1) == 0 ? (Game.Random.Int( 0, 1 ) == 0 ? CardType.FortuneCookie : CardType.Bomb) : (Game.Random.Int( 0, 1 ) == 0 ? CardType.Map : CardType.Twins)),
				};
				break;

			default:
				Log.Error( $"Level {levelNum} not implemented!" );
				break;
		}

		return cardTypes;
	}
}