using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Layout;
using Avalonia.Media;
using Xunit;

#if AVALONIA_SKIA
namespace Avalonia.Skia.RenderTests
#else
namespace Avalonia.Direct2D1.RenderTests.Controls
#endif
{
    public class TextBlockTests : TestBase
    {
        public TextBlockTests()
            : base(@"Controls\TextBlock")
        {
        }

        [Win32Fact("Has text")]
        public async Task Wrapping_NoWrap()
        {
            Decorator target = new Decorator
            {
                Padding = new Thickness(8),
                Width = 200,
                Height = 200,
                Child = new TextBlock
                {
                    FontFamily = new FontFamily("Courier New"),
                    Background = Brushes.Red,
                    FontSize = 12,
                    Foreground = Brushes.Black,
                    Text = "Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit",
                    VerticalAlignment = VerticalAlignment.Top,
                    TextWrapping = TextWrapping.NoWrap,
                }
            };

            await RenderToFile(target);
            CompareImages();
        }


        [Win32Fact("Has text")]
        public async Task RestrictedHeight_VerticalAlign()
        {
            IControl text(VerticalAlignment verticalAlingnment, bool clip = true, bool restrictHeight = true)
            {
                return new Border()
                {
                    BorderBrush = Brushes.Blue,
                    BorderThickness = new Thickness(1),
                    VerticalAlignment = VerticalAlignment.Center,
                    HorizontalAlignment = HorizontalAlignment.Center,
                    Height = restrictHeight ? 20 : double.NaN,
                    Margin = new Thickness(1),
                    Child = new TextBlock
                    {
                        FontFamily = new FontFamily("Courier New"),
                        Background = Brushes.Red,
                        FontSize = 24,
                        Foreground = Brushes.Black,
                        Text = "L",
                        VerticalAlignment = verticalAlingnment,
                        ClipToBounds = clip
                    }
                };
            }
            Decorator target = new Decorator
            {
                Padding = new Thickness(8),
                Width = 180,
                Height = 80,

                Child = new StackPanel()
                {
                    Orientation = Orientation.Horizontal,
                    Children =
                    {
                        text(VerticalAlignment.Stretch, restrictHeight: false),
                        text(VerticalAlignment.Center),
                        text(VerticalAlignment.Stretch),
                        text(VerticalAlignment.Top),
                        text(VerticalAlignment.Bottom),
                        text(VerticalAlignment.Center, clip:false),
                        text(VerticalAlignment.Stretch, clip:false),
                        text(VerticalAlignment.Top, clip:false),
                        text(VerticalAlignment.Bottom, clip:false),
                    }
                }
            };

            await RenderToFile(target);
            CompareImages();
        }
    }
}
