using Terminal.Gui;

namespace UICatalog.Scenarios;

[ScenarioMetadata ("LineCanvas Experiments", "Experiments with LineCanvas")]
[ScenarioCategory ("Drawing")]
[ScenarioCategory ("Borders")]
[ScenarioCategory ("Proof of Concept")]
public class LineCanvasExperiment : Scenario
{
    public override void Main ()
    {
        Application.Init ();

        Window app = new ()
        {
            Title = $"{Application.QuitKey} to Quit - Scenario: {GetName ()}"
        };

        var frame1 = new FrameView
        {
            Title = "LineCanvas Experiments",
            X = 0,
            Y = 0,
            Width = Dim.Fill (),
            Height = Dim.Fill (),
            ColorScheme = Colors.ColorSchemes ["Base"]
        };
        frame1.BorderStyle = LineStyle.Double;

        //View.Diagnostics ^= DiagnosticFlags.FrameRuler;

        app.Add (frame1);

        var win1 = new Window
        {
            Title = "win1",
            Text = "Win1 30%/50% Heavy",
            X = 20,
            Y = 0,
            Width = 30, //Dim.Percent (30) - 5,
            Height = 10, //Dim.Percent (50) - 5,
            //ColorScheme = Colors.ColorSchemes ["Base"],
            BorderStyle = LineStyle.Heavy,
            SuperViewRendersLineCanvas = true
        };
        win1.Padding.Thickness = new (1);

        frame1.Add (win1);

        var win2 = new Window
        {
            Title = "win2",
            Text = "Win2 right of win1, 30%/70% Single.",
            X = Pos.Right (win1) - 1,
            Y = 0,
            Width = Dim.Percent (30),
            Height = Dim.Percent (70),

            //ColorScheme = Colors.ColorSchemes ["Error"],
            SuperViewRendersLineCanvas = true
        };

        frame1.Add (win2);

        var view3 = new FrameView
        {
            Title = "View 3",
            Text = "View3 right of win2 Fill/Fill Single",
            X = Pos.Right (win2) - 1,
            Y = 0,
            Width = Dim.Fill (-1),
            Height = Dim.Fill (-1),
            SuperViewRendersLineCanvas = true

            //ColorScheme = Colors.ColorSchemes ["Menu"],
        };

        frame1.Add (view3);

        var view4 = new FrameView
        {
            Title = "View 4",
            Text = "View4 below win2 win2.Width/5 Single",
            X = Pos.Left (win2),
            Y = Pos.Bottom (win2) - 1,
            Width = win2.Width,
            Height = 5,
            SuperViewRendersLineCanvas = true

            //ColorScheme = Colors.ColorSchemes ["TopLevel"],
        };

        frame1.Add (view4);

        var win5 = new Window
        {
            Title = "Win 5",
            Text = "win5 below View4 view4.Width/5 Double",
            X = Pos.Left (win2),
            Y = Pos.Bottom (view4) - 1,
            Width = view4.Width,
            Height = 5,

            //ColorScheme = Colors.ColorSchemes ["TopLevel"],
            SuperViewRendersLineCanvas = true,
            BorderStyle = LineStyle.Double
        };

        frame1.Add (win5);

        var line = new Line
        {
            X = 1,
            Y = 1,
            Width = 10,
            Height = 1,
            Orientation = Orientation.Horizontal,
            SuperViewRendersLineCanvas = true
        };
        frame1.Add (line);

        var marginWindow = new Window
        {
            Title = "Positive Margin",
            X = 0,
            Y = 8,
            Width = 25,
            Height = 10,

            //ColorScheme = Colors.ColorSchemes ["Error"],
            SuperViewRendersLineCanvas = true
        };
        marginWindow.Margin.ColorScheme = Colors.ColorSchemes ["Dialog"];
        marginWindow.Margin.Thickness = new (1);
        marginWindow.Border.Thickness = new (1, 2, 1, 1);

        frame1.Add (marginWindow);

        Application.Run (app);
        app.Dispose ();
    }
}
