// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;
using SamplePagesExtension.Pages;
using SamplePagesExtension.Pages.IssueSpecificPages;

namespace SamplePagesExtension;

public partial class SamplesListPage : ListPage
{
    private readonly IListItem[] _commands = [

        // List pages
        new ListItem(new SampleListPage())
        {
            Title = "List Page Sample Command",
            Subtitle = "Display a list of items",
        },
        new ListItem(new SampleListPageWithDetails())
        {
            Title = "List Page With Details",
            Subtitle = "A list of items, each with additional details to display",
        },
        new ListItem(new SectionsIndexPage())
        {
            Title = "List Pages With Sections",
            Subtitle = "A list of items, with sections header",
        },
        new ListItem(new SampleUpdatingItemsPage())
        {
            Title = "List page with items that change",
            Subtitle = "The items on the list update themselves in real time",
        },
        new ListItem(new SampleDynamicListPage())
        {
            Title = "Dynamic List Page Command",
            Subtitle = "Changes the list of items in response to the typed query",
        },
        new ListItem(new SampleGridsListPage())
        {
            Title = "Grid views and galleries",
            Subtitle = "Displays items as a gallery",
        },
        new ListItem(new OnLoadPage())
        {
            Title = "Demo of OnLoad/OnUnload",
            Subtitle = "Changes the list of items every time the page is opened / closed",
        },
        new ListItem(new SampleIconPage())
        {
            Title = "Sample Icon Page",
            Subtitle = "A demo of using icons in various ways",
        },
        new ListItem(new SlowListPage())
        {
            Title = "Slow loading list page",
            Subtitle = "A demo of a list page that takes a while to load",
        },

        // Content pages
        new ListItem(new SampleContentPage())
        {
            Title = "Sample content page",
            Subtitle = "Display mixed forms, markdown, and other types of content",
        },
        new ListItem(new SamplePlainTextContentPage())
        {
            Title = "Sample plain text content page",
            Subtitle = "Display a page of plain text content",
        },
        new ListItem(new SampleImageContentPage())
        {
            Title = "Sample image content page",
            Subtitle = "Display a page with an image",
        },
        new ListItem(new SampleTreeContentPage())
        {
            Title = "Sample nested content",
            Subtitle = "Example of nesting a tree of content",
        },
        new ListItem(new SampleCommentsPage())
        {
            Title = "Sample of nested comments",
            Subtitle = "Demo of using nested trees of content to create a comment thread-like experience",
            Icon = new IconInfo("\uE90A"), // Comment
        },
        new ListItem(new SampleMarkdownPage())
        {
            Title = "Markdown Page Sample Command",
            Subtitle = "Display a page of rendered markdown",
        },
            new ListItem(new SampleMarkdownManyBodies())
        {
            Title = "Markdown with multiple blocks",
            Subtitle = "A page with multiple blocks of rendered markdown",
        },
        new ListItem(new SampleMarkdownDetails())
        {
            Title = "Markdown with details",
            Subtitle = "A page with markdown and details",
        },
        new ListItem(new SampleMarkdownImagesPage())
        {
            Title = "Markdown with images",
            Subtitle = "A page with rendered markdown and images",
            Icon = new IconInfo("\uee71"),
        },

        // Settings helpers
        new ListItem(new SampleSettingsPage())
        {
            Title = "Sample settings page",
            Subtitle = "A demo of the settings helpers",
        },

        // Data package samples
        new ListItem(new SampleDataTransferPage())
        {
            Title = "Clipboard and Drag-and-Drop Demo",
            Subtitle = "Demonstrates clipboard integration and drag-and-drop functionality",
        },

        // Evil edge cases
        // Anything weird that might break the palette - put that in here.
        new ListItem(new EvilSamplesPage())
        {
            Title = "Evil samples",
            Subtitle = "Samples designed to break the palette in many different evil ways",
        },
        new ListItem(new AllIssueSamplesIndexPage())
        {
            Title = "Issue-specific samples",
            Subtitle = "Samples designed to reproduce specific issues",
        }
    ];

    public SamplesListPage()
    {
        Name = "Samples";
        Icon = new IconInfo("\ue946"); // Info
    }

    public override IListItem[] GetItems() => _commands;
}
