<Rows>
    <Markup Content="@Loc.OverviewTitle" Foreground="@UiPalette.Text" Decoration="@Spectre.Console.Decoration.Bold" />
    <Markup Content=" " />

    @if (Rows.Count == 0)
    {
        <Border BorderColor="@UiPalette.Frame" BoxBorder="@Spectre.Console.BoxBorder.Rounded" Padding="@(new Spectre.Console.Padding(0, 0, 0, 0))">
            <Markup Content="@Loc.OverviewEmpty" Foreground="@UiPalette.TextDim" />
        </Border>
    }
    else
    {
        <Select TItem="int"
                Options="@GetOptions()"
                Value="@GetNormalizedIndex()"
                FocusedValue="@GetNormalizedIndex()"
                Formatter="@FormatRow"
                Expand="true"
                BorderStyle="@Spectre.Console.BoxBorder.Rounded"
                SelectedIndicator="@('>')" />
    }

    <Markup Content=" " />
    <Markup Content="@GetFooterText()" Foreground="@UiPalette.TextMuted" />
</Rows>

@code {
    [Parameter, EditorRequired] public IReadOnlyList<OverviewRow> Rows { get; set; } = Array.Empty<OverviewRow>();
    [Parameter] public int SelectedIndex { get; set; }
    [Parameter] public EventCallback<int> SelectedIndexChanged { get; set; }
    [Parameter] public int ViewportRows { get; set; } = 3;
    [Parameter] public TuiResources Loc { get; set; } = TuiResources.En;

    private int[] GetOptions() => Enumerable.Range(0, Rows.Count).ToArray();

    private int GetNormalizedIndex() => Rows.Count == 0 ? 0 : Math.Clamp(SelectedIndex, 0, Rows.Count - 1);

    private string GetFooterText()
    {
        if (Rows.Count == 0)
        {
            return Loc.OverviewEmpty;
        }

        var selected = Rows[Math.Clamp(SelectedIndex, 0, Rows.Count - 1)];
        var state = selected.IsModuleEnabled ? Loc.StateOn : Loc.StateOff;
        return $"{selected.ModuleName}: {selected.Description} | {Loc.FooterModule} {state} | {Loc.FooterTools} {selected.ConfiguredTools}/{selected.TotalTools}";
    }

    private string FormatRow(int index)
    {
        var row = Rows[index];
        var status = row.IsModuleEnabled ? $"[{Loc.StateOn}] " : $"[{Loc.StateOff}]";
        var text = $"{row.ModuleName,-12} {status}  {row.ConfiguredTools,2}/{row.TotalTools,-2}  {row.Description}";
        return Fit(text, Math.Max(UiMetrics.ConsoleWidth - 12, 32));
    }

    private static string Fit(string text, int width)
    {
        if (width <= 0) return string.Empty;
        if (text.Length <= width) return text.PadRight(width);
        if (width <= 3) return text[..width];
        return text[..(width - 3)] + "...";
    }
}
