using System.Text;
using Terminal.Gui;

namespace UICatalog.Scenarios;

[ScenarioMetadata ("Line View", "Demonstrates drawing lines using the LineView control.")]
[ScenarioCategory ("Controls")]
[ScenarioCategory ("LineView")]
[ScenarioCategory ("Borders")]
public class LineViewExample : Scenario
{
    public override void Setup ()
    {
        Win.Title = GetName ();
        Win.Y = 1; // menu
        Win.Height = Dim.Fill (1); // status bar

        var menu = new MenuBar
        {
            Menus =
            [
                new MenuBarItem ("_File", new MenuItem [] { new ("_Quit", "", () => Quit ()) })
            ]
        };
        Application.Top.Add (menu);

        Win.Add (new Label { Y = 0, Text = "Regular Line" });

        // creates a horizontal line
        var line = new LineView { Y = 1 };

        Win.Add (line);

        Win.Add (new Label { Y = 2, Text = "Double Width Line" });

        // creates a horizontal line
        var doubleLine = new LineView { Y = 3, LineRune = (Rune)'\u2550' };

        Win.Add (doubleLine);

        Win.Add (new Label { Y = 4, Text = "Short Line" });

        // creates a horizontal line
        var shortLine = new LineView { Y = 5, Width = 10 };

        Win.Add (shortLine);

        Win.Add (new Label { Y = 6, Text = "Arrow Line" });

        // creates a horizontal line
        var arrowLine = new LineView
        {
            Y = 7, Width = 10, StartingAnchor = CM.Glyphs.LeftTee, EndingAnchor = (Rune)'>'
        };

        Win.Add (arrowLine);

        Win.Add (new Label { Y = 9, X = 11, Text = "Vertical Line" });

        // creates a horizontal line
        var verticalLine = new LineView (Orientation.Vertical) { X = 25 };

        Win.Add (verticalLine);

        Win.Add (new Label { Y = 11, X = 28, Text = "Vertical Arrow" });

        // creates a horizontal line
        var verticalArrow = new LineView (Orientation.Vertical)
        {
            X = 27, StartingAnchor = CM.Glyphs.TopTee, EndingAnchor = (Rune)'V'
        };

        Win.Add (verticalArrow);

        var statusBar = new StatusBar (
                                       new StatusItem []
                                       {
                                           new (
                                                Application.QuitKey,
                                                $"{Application.QuitKey} to Quit",
                                                () => Quit ()
                                               )
                                       }
                                      );
        Application.Top.Add (statusBar);
    }

    private void Quit () { Application.RequestStop (); }
}
