using System.Threading.Tasks;
using Spectre.Console.Rendering;
using Spectre.Console.Testing;
using Spectre.Verify.Extensions;
using VerifyXunit;
using Xunit;

namespace Spectre.Console.Tests.Unit
{
    [UsesVerify]
    [ExpectationPath("Widgets/Rows")]
    public sealed class RowsTests
    {
        [Fact]
        [Expectation("Render")]
        public Task Should_Render_Rows()
        {
            // Given
            var console = new FakeConsole(width: 60);
            var rows = new Rows(
                new IRenderable[]
                {
                    new Markup("Hello"),
                    new Table()
                        .AddColumns("Foo", "Bar")
                        .AddRow("Baz", "Qux"),
                    new Markup("World"),
                });

            // When
            console.Write(rows);

            // Then
            return Verifier.Verify(console.Output);
        }

        [Fact]
        [Expectation("Render_Nested")]
        public Task Should_Render_Rows_Correctly_Inside_Other_Widget()
        {
            // Given
            var console = new FakeConsole(width: 60);
            var table = new Table()
                .AddColumns("Foo", "Bar")
                .AddRow("HELLO WORLD")
                .AddRow(
                new Rows(new IRenderable[]
                {
                    new Markup("Hello"),
                    new Markup("World"),
                }), new Text("Qux"));

            // When
            console.Write(table);

            // Then
            return Verifier.Verify(console.Output);
        }

        [Fact]
        [Expectation("Render_Expanded_And_Nested")]
        public Task Should_Render_Rows_Correctly_Inside_Other_Widget_When_Expanded()
        {
            // Given
            var console = new FakeConsole(width: 60);
            var table = new Table()
                .AddColumns("Foo", "Bar")
                .AddRow("HELLO WORLD")
                .AddRow(
                new Rows(new IRenderable[]
                {
                    new Markup("Hello"),
                    new Markup("World"),
                }).Expand(), new Text("Qux"));

            // When
            console.Write(table);

            // Then
            return Verifier.Verify(console.Output);
        }
    }
}
