state("REPO") 
{
	
}

startup
{
	vars.Watch = (Action<string>)(key => { if(vars.Helper[key].Changed) vars.Log(key + ": " + vars.Helper[key].Old + " -> " + vars.Helper[key].Current); });
	Assembly.Load(File.ReadAllBytes("Components/asl-help")).CreateInstance("Unity");
	vars.Helper.GameName = "R.E.P.O.";
	vars.Helper.AlertLoadless();

	settings.Add("levelSplit", true, "Split on completing a Level");

	settings.Add("taxSplit", true, "Split on reaching currency amount");
    settings.Add("100", false, "100K", "taxSplit");
    settings.Add("250", false, "250K", "taxSplit");
    settings.Add("500", false, "500K", "taxSplit");
    settings.Add("1000", false, "1M", "taxSplit");
    settings.Add("2000", false, "2M", "taxSplit");
	
}
init
{
    vars.Helper.TryLoad = (Func<dynamic, bool>)(mono =>
    {
        vars.previousLevel = "Main Menu";
        vars.Helper["levelName"] = mono.MakeString("RunManager", "instance", "levelCurrent", "NarrativeName");
        vars.Helper["tutorialStage"] = mono.Make<int>("TutorialDirector", "instance", "currentPage");
        vars.Helper["state"] = mono.Make<int>("GameDirector", "instance", "currentState");

		vars.Helper["currency"] = mono.Make<int>("CurrencyUI", "instance", "currentHaulValue");

        return true;
    });
	vars.currencySplits = new List<int>(){100, 250, 500, 1000, 2000};
}
onStart
{
    vars.currencySplits = new List<int>(){100, 250, 500, 1000, 2000};
}
update
{
	// Game uses custom level system instead of Unity's built in Scenes
	if(current.levelName != old.levelName)
	{
		vars.previousLevel = old.levelName;
	}
}
start 
{
    // Timer should start only after the loading screen (state changes to 2; Main)
    if(old.state != 2 && current.state == 2) {
        // Do not start if the current level is a menu
        if(current.levelName == "Main Menu" || current.levelName == "Lobby Menu") {
            return false;
        }
        // If coming from a menu (either Main Menu or Lobby Menu), start the timer
        if(vars.previousLevel == "Main Menu" || vars.previousLevel == "Lobby Menu") {
            return true;
        }
    }
    return false;
}


split
{
	// Only Split if the user has selected levelSplit
	if(settings["levelSplit"])
	{
		// If level name changes
		if(current.levelName != old.levelName)
		{
			// if going to main menu, ignore, unless coming from completed tutorial
			if(current.levelName == "Main Menu") 
			{
				if(old.levelName == "Tutorial" && current.tutorialStage == 16)
				{
					return true;
				}
				return false;
			}

			// If we did not come from truck, or shop, check if died as well
			if((old.levelName != "Service Station") && (old.levelName != "Truck")  && (current.levelName != "Disposal Arena"))
			{
				return true;
			}
		}
	}
	//{100, 250, 500, 1000, 2000};
	// If playing Taxes%
	if(settings["taxSplit"])
	{
		// Total Earned Amount Changed
		if(old.currency != current.currency)
		{
			if(current.currency >= 100 && settings["100"] && vars.currencySplits.Contains(100))
			{
				vars.currencySplits.Remove(100);
				return true;
			}
			if(current.currency >= 250 && settings["250"] && vars.currencySplits.Contains(250))
			{
				vars.currencySplits.Remove(250);
				return true;
			}
			if(current.currency >= 500 && settings["500"] && vars.currencySplits.Contains(500))
			{
				vars.currencySplits.Remove(500);
				return true;
			}
			if(current.currency >= 1000 && settings["1000"] && vars.currencySplits.Contains(1000))
			{
				vars.currencySplits.Remove(1000);
				return true;
			}
			if(current.currency >= 2000 && settings["2000"] && vars.currencySplits.Contains(2000))
			{
				vars.currencySplits.Remove(2000);
				return true;
			}

			return false;
		}
		return false;
	}
	
	return false;
}               
isLoading
{
	// State 2 is "Main" state, applicable to Main Menu and actual Gameplay, State 6 is "Death" State, unless in tutorial ig idfk
	return (current.state != 2 && current.state != 6);
}
reset
{
	// Level changed
	if(current.levelName != old.levelName)
	{
		// Going to Main Menu
		if(current.levelName == "Main Menu" || current.levelName == "Disposal Arena")
		{
			if(old.levelName == "Tutorial" && current.tutorialStage == 16)
			{
				return false;
				// Finished Tutorial, don't reset
			}
			return true;
		}
	}
	return false;
}