<MudTreeView T="ITreeItem" Items="@this.treeItems" SelectionMode="SelectionMode.SingleSelection" Hover="@true" ExpandOnClick="@true" Class="ma-3">
    <ItemTemplate Context="item">
        @switch (item.Value)
        {
            case TreeDivider:
                <li style="min-height: 1em;">
                    <MudDivider Style="margin-top: 1em; width: 90%; border-width: 3pt;"/>
                </li>
                break;
                
            case TreeItemData treeItem:
                @if (treeItem.Type is TreeItemType.CHAT)
                {
                    <MudTreeViewItem T="ITreeItem" Icon="@treeItem.Icon" Value="@item.Value" Expanded="@item.Expanded" CanExpand="@treeItem.Expandable" Items="@treeItem.Children" OnClick="() => this.LoadChat(treeItem.Path, true)">
                        <BodyContent>
                            <div style="display: grid; grid-template-columns: 1fr auto; align-items: center; width: 100%">
                                <MudText Style="justify-self: start;">
                                    @if (string.IsNullOrWhiteSpace(treeItem.Text))
                                    {
                                        @("Empty chat")
                                    }
                                    else
                                    {
                                        @treeItem.ShortenedText
                                    }
                                </MudText>
                                <div style="justify-self: end;">
                                    
                                    <MudTooltip Text="Move to workspace" Placement="@WORKSPACE_ITEM_TOOLTIP_PLACEMENT">
                                        <MudIconButton Icon="@Icons.Material.Filled.MoveToInbox" Size="Size.Medium" Color="Color.Inherit" OnClick="() => this.MoveChat(treeItem.Path)"/>
                                    </MudTooltip>
                                    
                                    <MudTooltip Text="Rename" Placement="@WORKSPACE_ITEM_TOOLTIP_PLACEMENT">
                                        <MudIconButton Icon="@Icons.Material.Filled.Edit" Size="Size.Medium" Color="Color.Inherit" OnClick="() => this.RenameChat(treeItem.Path)"/>
                                    </MudTooltip>

                                    <MudTooltip Text="Delete" Placement="@WORKSPACE_ITEM_TOOLTIP_PLACEMENT">
                                        <MudIconButton Icon="@Icons.Material.Filled.Delete" Size="Size.Medium" Color="Color.Inherit" OnClick="() => this.DeleteChat(treeItem.Path)"/>
                                    </MudTooltip>
                                </div>
                            </div>
                        </BodyContent>
                    </MudTreeViewItem>
                }
                else if (treeItem.Type is TreeItemType.WORKSPACE)
                {
                    <MudTreeViewItem T="ITreeItem" Icon="@treeItem.Icon" Value="@item.Value" Expanded="@item.Expanded" CanExpand="@treeItem.Expandable" Items="@treeItem.Children">
                        <BodyContent>
                            <div style="display: grid; grid-template-columns: 1fr auto; align-items: center; width: 100%">
                                <MudText Style="justify-self: start;">@treeItem.Text</MudText>
                                <div style="justify-self: end;">
                                    <MudTooltip Text="Rename" Placement="@WORKSPACE_ITEM_TOOLTIP_PLACEMENT">
                                        <MudIconButton Icon="@Icons.Material.Filled.Edit" Size="Size.Medium" Color="Color.Inherit" OnClick="() => this.RenameWorkspace(treeItem.Path)"/>
                                    </MudTooltip>

                                    <MudTooltip Text="Delete" Placement="@WORKSPACE_ITEM_TOOLTIP_PLACEMENT">
                                        <MudIconButton Icon="@Icons.Material.Filled.Delete" Size="Size.Medium" Color="Color.Inherit" OnClick="() => this.DeleteWorkspace(treeItem.Path)"/>
                                    </MudTooltip>
                                </div>
                            </div>
                        </BodyContent>
                    </MudTreeViewItem>
                }
                else
                {
                    <MudTreeViewItem T="ITreeItem" Icon="@treeItem.Icon" Value="@item.Value" Expanded="@item.Expanded" CanExpand="@treeItem.Expandable" Items="@treeItem.Children">
                        <BodyContent>
                            <div style="display: grid; grid-template-columns: 1fr auto; align-items: center; width: 100%">
                                <MudText Style="justify-self: start;">@treeItem.Text</MudText>
                            </div>
                        </BodyContent>
                    </MudTreeViewItem>
                }
                break;
                
            case TreeButton treeButton:
                <li>
                    <div class="mud-treeview-item-content" style="background-color: unset;">
                        <div class="mud-treeview-item-arrow"></div>
                        <MudButton StartIcon="@treeButton.Icon" Variant="Variant.Filled" OnClick="treeButton.Action">
                            @treeButton.Text
                        </MudButton>
                    </div>
                </li>
                break;
        }
    </ItemTemplate>
</MudTreeView>