UI/MainPanel.razor
@using Sandbox;
@using Sandbox.UI;
@using HC3.UI
@using HC3
@inherits PanelComponent
@namespace HC3

<root>
    <!-- Controls -->
    <left>
        <div class="column">
            <div class="info-panel">
                <row class="money window-container">
                    <img src="textures/hud/money.png" />
                    <label>@Cash</label>

                    @if ( TrendingUp )
                    {
                        <img src="textures/hud/trend_up.png" />
                    }
                    else
                    {
                        <img src="textures/hud/trend_down.png" />
                    }
                </row>
            </div>

            <div class="info-panel">
                <row class="window-container">
                    <img src="textures/hud/time.png" />
                    <label>@(Scene.TimeScale)x</label>

                    <button class="@(Speed == 0 ? "on" : "") time-control" onclick=@TogglePause>
                        <img src="textures/speedcontrols/pause.png" />
                    </button>
                    <button class="@(Speed == 2 ? "on" : "") time-control" onclick=@(() => SetSpeed(2))>
                        <img src="textures/speedcontrols/fast_forward_2.png" />
                    </button>
                    <button class="@(Speed == 3 ? "on" : "") time-control" onclick=@(() => SetSpeed(3))>
                        <img src="textures/speedcontrols/fast_forward_3.png" />
                    </button>
                    <button class="@(Speed == 5 ? "on" : "") time-control" onclick=@(() => SetSpeed(5))>
                        <img src="textures/speedcontrols/fast_forward_5.png" />
                    </button>
                </row>
            </div>
        </div>

    </left>

    <middle>
        <div class="window-container">
			<button class="square-button" tooltip="Paths" onclick=@(() => PathWindow.Show())>
				<img src="textures/hud/road.png" />
			</button>
            <button class="square-button" tooltip="Catalog" onclick=@(() => BuildingPanel.Show())>
                <img src="textures/hud/ferris_wheel.png" />
			</button>
            <button class="square-button" onclick=@(() => FeaturesPanel.Show()) tooltip="Decorations">
                <img src="textures/hud/tree.png" />
            </button>
            <CanvasButton Icon="textures/hud/terrain.png" Canvas="TerraformCanvas" tooltip="Terrain" />

            <button class="square-button" onclick=@(() => RecruitmentPanel.Show()) tooltip="Staff">
                <img src="textures/hud/lanyard.png" />
            </button>

            <separator />

            <button onclick=@StartDestroying class="square-button @(IsDestroying ? "selected" : "")" tooltip="Bulldozer">
                <img src="textures/hud/bulldozer.png" />
            </button>
   
            <separator />

            <CanvasButton Icon="textures/hud/area.png" Canvas="AreaCanvas" tooltip="Area Tool" />

            <button class="square-button" onclick=@(() => AnimalsPanel.Show()) tooltip="Animals">
                <img src="textures/hud/pets.png" />
            </button>
        </div>
    </middle>

    <right>
        <div class="column">
            <div class="info-panel">
                <row class="window-container">
                    <Silkicon Icon="star" />
                    <label>@Rating</label>
                </row>

                <row class="window-container">
                    <Silkicon Icon="user" />
                    <label>@VisitorCount</label>
                </row>
            </div>
        </div>
        <div class="column">
            <CanvasButton Icon="textures/hud/grid.png" Canvas="ZoneCanvas" tooltip="Zoning Tool" />

            <separator />

            <Button class="square-button" onclick="@(() => ParkManagement.Show())" tooltip="Park Management">
                <img src="textures/hud/suit.png" />
            </Button>
        </div>

    </right>
</root>

@code
{
    public string Cash => ($"{(ParkManager.Instance?.Money ?? 0):C0}").Trim( '$' );
    public string VisitorCount => GuestManager.Instance?.GuestCount.ToString();
    public string Rating => (ParkManager.Instance?.Rating ?? 0).ToString("0.0");

    float Speed => Scene.TimeScale;

    private bool IsDestroying => BuildingPlacer.Instance?.IsDestroying ?? false;
    protected override int BuildHash() => System.HashCode.Combine(Cash, VisitorCount, Rating, LastCash, TrendingUp, IsDestroying);

    protected override void OnUpdate()
    {
        base.OnUpdate();

        if ( Input.Keyboard.Pressed( "1" ) )
        {
            BaseCanvas.ToggleCanvas( "PathCanvas" );
        }
        else if ( Input.Keyboard.Pressed( "2" ) )
        {
            BuildingPanel.Show();
        }
        else if ( Input.Keyboard.Pressed( "3" ) )
        {
            FeaturesPanel.Show();
        }
        else if ( Input.Keyboard.Pressed( "4" ) )
        {
            BaseCanvas.ToggleCanvas( "TerraformCanvas" );
        }
        else if ( Input.Keyboard.Pressed( "5" ) )
        {
            RecruitmentPanel.Show();
        }
        else if ( Input.Keyboard.Pressed( "6" ) )
        {
            StartDestroying();
        }

        UpdateTrendArrow();
    }

    private RealTimeSince TimeSinceTrendUpdated;
    private int LastCash;
    private bool TrendingUp;

    void UpdateTrendArrow()
    {
        if (TimeSinceTrendUpdated > 30)
        {
            var currentCash = ParkManager.Instance?.Money ?? 0;

            TrendingUp = LastCash > currentCash;
            LastCash = currentCash;
            TimeSinceTrendUpdated = 0;
        }
    }

    void StartDestroying()
    {
        BaseCanvas.CloseAllCanvases();

        var buildingPlacer = BuildingPlacer.Instance;
        if (!buildingPlacer.IsValid()) return;

        buildingPlacer.IsDestroying = !buildingPlacer.IsDestroying;

        if ( buildingPlacer.IsDestroying )
        {
            Sound.Play( "bulldozer_activate" );
        }
    }

	void StartLandPurchase()
	{
		BaseCanvas.CloseAllCanvases();
		var buildingZoner = BuildingZone.Instance;
		if (!buildingZoner.IsValid()) return;
		buildingZoner.TogglePurchaseMode();
	}

    void TogglePause()
    {
        DayNightController.Instance?.TogglePause();
    }

    void ResetSpeed()
    {
        DayNightController.Instance?.ResetSpeed();
    }

    void SetSpeed(int speed)
    {
        if (Scene.TimeScale == speed)
            DayNightController.Instance?.ResetSpeed();
        else
            DayNightController.Instance?.SetSpeed(speed);
    }
}