using Terminal.Gui;

namespace UICatalog.Scenarios;

[ScenarioMetadata ("Text Direction and AutoSize", "Demos TextFormatter Direction and View AutoSize.")]
[ScenarioCategory ("Text and Formatting")]
public class AutoSizeAndDirectionText : Scenario
{
    public override void Setup ()
    {
        var text = "Hello World";
        var wideText = "Hello World 你";
        ColorScheme color = Colors.ColorSchemes ["Dialog"];

        var labelH = new Label
        {
            X = 1,
            Y = 1,

            //    Width = 11,
            //    Height = 1,
            ColorScheme = color,
            Text = text,
            TextDirection = TextDirection.LeftRight_TopBottom
        };
        Win.Add (labelH);

        var labelV = new Label
        {
            X = 70,
            Y = 1,

            //    Width = 1,
            //    Height = 11,
            ColorScheme = color,
            Text = text,
            TextDirection = TextDirection.TopBottom_LeftRight
        };
        Win.Add (labelV);

        var editText = new TextView
        {
            X = Pos.Center (),
            Y = Pos.Center (),
            Width = 20,
            Height = 5,
            Text = text
        };

        editText.SetFocus ();

        Win.Add (editText);

        var ckbDirection = new CheckBox { Text = "Toggle Direction", X = Pos.Center (), Y = Pos.Center () + 3 };

        ckbDirection.Toggled += (s, e) =>
                                {
                                    if (labelH.TextDirection == TextDirection.LeftRight_TopBottom)
                                    {
                                        labelH.TextDirection = TextDirection.TopBottom_LeftRight;
                                        labelV.TextDirection = TextDirection.LeftRight_TopBottom;
                                    }
                                    else
                                    {
                                        labelH.TextDirection = TextDirection.LeftRight_TopBottom;
                                        labelV.TextDirection = TextDirection.TopBottom_LeftRight;
                                    }
                                };
        Win.Add (ckbDirection);

        var ckbAutoSize = new CheckBox
        {
            Text = "Auto Size", X = Pos.Center (), Y = Pos.Center () + 5, Checked = labelH.AutoSize = labelV.AutoSize
        };
        ckbAutoSize.Toggled += (s, e) => labelH.AutoSize = labelV.AutoSize = (bool)ckbAutoSize.Checked;
        Win.Add (ckbAutoSize);

        var ckbPreserveTrailingSpaces = new CheckBox
        {
            Text = "Preserve Trailing Spaces",
            X = Pos.Center (),
            Y = Pos.Center () + 7,
            Checked = labelH.PreserveTrailingSpaces =
                          labelV.PreserveTrailingSpaces
        };

        ckbPreserveTrailingSpaces.Toggled += (s, e) =>
                                                 labelH.PreserveTrailingSpaces = labelV.PreserveTrailingSpaces = (bool)ckbPreserveTrailingSpaces.Checked;
        Win.Add (ckbPreserveTrailingSpaces);

        var ckbWideText = new CheckBox { Text = "Use wide runes", X = Pos.Center (), Y = Pos.Center () + 9 };

        ckbWideText.Toggled += (s, e) =>
                               {
                                   if (ckbWideText.Checked == true)
                                   {
                                       labelH.Text = labelV.Text = editText.Text = wideText;
                                       labelH.Width = 14;
                                       labelV.Height = 13;
                                   }
                                   else
                                   {
                                       labelH.Text = labelV.Text = editText.Text = text;
                                       labelH.Width = 11;
                                       labelV.Width = 1;
                                       labelV.Height = 11;
                                   }
                               };
        Win.Add (ckbWideText);

        Win.KeyUp += (s, e) =>
                         labelH.Text = labelV.Text = text = editText.Text;
    }
}
