@using AIStudio.Chat

<MudText Typo="Typo.h3" Class="mb-2 mr-3">
    @(this.Title)
</MudText>

<InnerScrolling HeaderHeight="6em">
    <ChildContent>
        <MudForm @ref="@(this.form)" @bind-IsValid="@(this.inputIsValid)" @bind-Errors="@(this.inputIssues)" Class="pr-2">
            <MudText Typo="Typo.body1" Align="Align.Justify" Class="mb-6">
                @(this.Description)
            </MudText>

            @if (this.Body is not null)
            {
                @(this.Body)
            }
        </MudForm>
        <Issues IssuesData="@(this.inputIssues)"/>

        @if (this.ShowDedicatedProgress && this.isProcessing)
        {
            <MudProgressLinear Color="Color.Primary" Indeterminate="true" Class="mb-6" />
        }
        
        <div id="@RESULT_DIV_ID" class="mr-2 mt-3">
        </div>

        @if (this.ShowResult && this.resultingContentBlock is not null)
        {
            <ContentBlockComponent Role="@(this.resultingContentBlock.Role)" Type="@(this.resultingContentBlock.ContentType)" Time="@(this.resultingContentBlock.Time)" Content="@(this.resultingContentBlock.Content)"/>
        }
        
        <div id="@AFTER_RESULT_DIV_ID" class="mt-3">
        </div>
    </ChildContent>
    <FooterContent>
        <MudStack Row="@true" Wrap="Wrap.Wrap" Class="ma-1">
            
            @if (!this.FooterButtons.Any(x => x.Type is ButtonTypes.SEND_TO))
            {
                <MudMenu StartIcon="@Icons.Material.Filled.Apps" EndIcon="@Icons.Material.Filled.KeyboardArrowDown" Label="Send to ..." Variant="Variant.Filled" Color="Color.Info">
                    @foreach (var assistant in Enum.GetValues<Components>().OrderBy(n => n.Name().Length))
                    {
                        if (assistant is Components.NONE || this.Component == assistant)
                            continue;

                        <MudMenuItem OnClick="() => this.SendToAssistant(assistant, new())">
                            @assistant.Name()
                        </MudMenuItem>
                    }
                </MudMenu>
            }

            @foreach (var button in this.FooterButtons)
            {
                switch (button)
                {
                    case ButtonData buttonData when !string.IsNullOrWhiteSpace(buttonData.Tooltip):
                        <MudTooltip Text="@buttonData.Tooltip">
                            <MudButton Variant="Variant.Filled" Color="@buttonData.Color" StartIcon="@GetButtonIcon(buttonData.Icon)" OnClick="async () => await buttonData.AsyncAction()">
                                @buttonData.Text
                            </MudButton>
                        </MudTooltip>
                        break;

                    case ButtonData buttonData:
                        <MudButton Variant="Variant.Filled" Color="@buttonData.Color" StartIcon="@GetButtonIcon(buttonData.Icon)" OnClick="async () => await buttonData.AsyncAction()">
                            @buttonData.Text
                        </MudButton>
                        break;

                    case SendToButton sendToButton:
                        <MudMenu StartIcon="@Icons.Material.Filled.Apps" EndIcon="@Icons.Material.Filled.KeyboardArrowDown" Label="Send to ..." Variant="Variant.Filled" Color="Color.Info">
                            @foreach (var assistant in Enum.GetValues<Components>().OrderBy(n => n.Name().Length))
                            {
                                if(assistant is Components.NONE || sendToButton.Self == assistant)
                                    continue;

                                <MudMenuItem OnClick="() => this.SendToAssistant(assistant, sendToButton)">
                                    @assistant.Name()
                                </MudMenuItem>
                            }
                        </MudMenu>
                        break;
                }
            }
            
            <MudButton Variant="Variant.Filled" StartIcon="@Icons.Material.Filled.ContentCopy" OnClick="() => this.CopyToClipboard()">
                Copy result
            </MudButton>
            
            <MudButton Variant="Variant.Filled" Color="Color.Warning" StartIcon="@Icons.Material.Filled.Refresh" OnClick="() => this.InnerResetForm()">
                Reset
            </MudButton>
        </MudStack>
    </FooterContent>
</InnerScrolling>