import { Panel, Group, vlayout, LayoutSpec, text, Color, gravity, stack, layoutConfig, scroller, Gravity, View, hlayout } from "doric";

function grid(title: string, view: View) {
    return vlayout(
        [
            text({
                text: title,
                backgroundColor: Color.parse("#3498db"),
                textColor: Color.WHITE,
                textAlignment: Gravity.CenterX,
                layoutConfig: {
                    widthSpec: LayoutSpec.MOST,
                    heightSpec: LayoutSpec.JUST,
                },
                height: 30
            }),
            stack(
                [
                    view
                ],
                {
                    layoutConfig: layoutConfig().just(),
                    width: 300,
                    height: 300,
                    backgroundColor: Color.parse("#ecf0f1"),
                })
        ])

}
function content() {
    return [
        text({
            text: "Content",
            textColor: Color.WHITE,
            backgroundColor: Color.parse("#34495e"),
        }),
        stack(
            [],
            {
                layoutConfig: {
                    widthSpec: LayoutSpec.JUST,
                    heightSpec: LayoutSpec.JUST,
                    margin: {
                        left: 10,
                        right: 10,
                        top: 10,
                        bottom: 10
                    }
                },
                width: 100,
                height: 100,
                backgroundColor: Color.parse("#34495e")
            })
    ]
}

function case1() {
    return stack(
        [
            stack(
                [
                    ...content(),
                ],
                {
                    layoutConfig: layoutConfig().most(),
                    backgroundColor: Color.parse("#1abc9c")
                })
        ],
        {
            layoutConfig: layoutConfig().fit(),
            padding: {
                left: 10, right: 10,
                top: 10, bottom: 10
            },
            backgroundColor: Color.parse("#9b59b6")
        }
    )
}

function case2() {
    return stack(
        [
            stack(
                [],
                {
                    layoutConfig: layoutConfig().most(),
                    backgroundColor: Color.parse("#1abc9c")
                }),
            ...content(),
        ],
        {
            layoutConfig: layoutConfig().fit(),
            padding: {
                left: 10, right: 10,
                top: 10, bottom: 10
            },
            backgroundColor: Color.parse("#9b59b6")
        }
    )
}

function case3() {
    return stack(
        [
            case1(),
        ],
        {
            layoutConfig: layoutConfig().fit(),
            padding: {
                left: 10, right: 10,
                top: 10, bottom: 10
            },
            backgroundColor: Color.parse("#2ecc71")
        }
    )
}

function case4() {
    return stack(
        [
            case2(),
        ],
        {
            layoutConfig: layoutConfig().fit(),
            padding: {
                left: 10, right: 10,
                top: 10, bottom: 10
            },
            backgroundColor: Color.parse("#2ecc71")
        }
    )
}

function case5() {
    return stack(
        [
            case3(),
        ],
        {
            layoutConfig: layoutConfig().fit(),
            padding: {
                left: 10, right: 10,
                top: 10, bottom: 10
            },
            backgroundColor: Color.parse("#3498db")
        }
    )
}


function case6() {
    return stack(
        [
            case3(),
        ],
        {
            layoutConfig: layoutConfig().fit(),
            padding: {
                left: 10, right: 10,
                top: 10, bottom: 10
            },
            backgroundColor: Color.parse("#3498db")
        }
    )
}
@Entry
class LayoutTest extends Panel {
    build(root: Group) {
        scroller(
            vlayout(
                [
                    grid(
                        "VLayout fit -> most -> just",
                        vlayout(
                            [
                                stack(
                                    [
                                        ...content(),
                                    ],
                                    {
                                        layoutConfig: layoutConfig().most(),
                                        backgroundColor: Color.parse("#1abc9c"),
                                        padding: {
                                            left: 10, right: 10,
                                            top: 10, bottom: 10,
                                        }
                                    })
                            ],
                            {
                                layoutConfig: layoutConfig().fit(),
                                backgroundColor: Color.parse("#9b59b6"),
                                padding: {
                                    left: 10, right: 10,
                                    top: 10, bottom: 10,
                                }
                            })
                    ),
                    grid(
                        "VLayout fit -> most, just",
                        vlayout(
                            [
                                stack(
                                    [],
                                    {
                                        layoutConfig: layoutConfig().most(),
                                        backgroundColor: Color.parse("#1abc9c"),
                                        padding: {
                                            left: 10, right: 10,
                                            top: 10, bottom: 10,
                                        }
                                    }),
                                ...content(),
                            ],
                            {
                                layoutConfig: layoutConfig().fit(),
                                backgroundColor: Color.parse("#9b59b6"),
                                padding: {
                                    left: 10, right: 10,
                                    top: 10, bottom: 10,
                                }
                            })
                    ),
                    grid(
                        "HLayout fit -> most -> just",
                        hlayout(
                            [
                                stack(
                                    [
                                        ...content(),
                                    ],
                                    {
                                        layoutConfig: layoutConfig().most(),
                                        backgroundColor: Color.parse("#1abc9c"),
                                        padding: {
                                            left: 10, right: 10,
                                            top: 10, bottom: 10,
                                        }
                                    })
                            ],
                            {
                                layoutConfig: layoutConfig().fit(),
                                backgroundColor: Color.parse("#9b59b6"),
                                padding: {
                                    left: 10, right: 10,
                                    top: 10, bottom: 10,
                                }
                            })
                    ),
                    grid(
                        "HLayout fit -> most, just",
                        hlayout(
                            [
                                stack(
                                    [],
                                    {
                                        layoutConfig: layoutConfig().most(),
                                        backgroundColor: Color.parse("#1abc9c"),
                                        padding: {
                                            left: 10, right: 10,
                                            top: 10, bottom: 10,
                                        }
                                    }),
                                ...content(),
                            ],
                            {
                                layoutConfig: layoutConfig().fit(),
                                backgroundColor: Color.parse("#9b59b6"),
                                padding: {
                                    left: 10, right: 10,
                                    top: 10, bottom: 10,
                                }
                            })
                    ),
                    grid(
                        "Stack fit -> most -> just",
                        case1(),
                    ),
                    grid(
                        "Stack fit -> most, just",
                        case2(),
                    ),
                    grid(
                        "Stack fit -> fit -> most -> just",
                        case3(),
                    ),
                    grid(
                        "Stack fit -> fit -> most, just",
                        case4(),
                    ),
                    grid(
                        "Stack fit -> fit -> fit -> most -> just",
                        case5(),
                    ),
                    grid(
                        "Stack fit -> fit -> fit -> most, just",
                        case6(),
                    ),
                ],
                {
                    layoutConfig: {
                        widthSpec: LayoutSpec.MOST,
                        heightSpec: LayoutSpec.FIT,
                    },
                    gravity: Gravity.CenterX,
                    space: 20,
                }),
            {
                layoutConfig: layoutConfig().most(),
            }).in(root)
    }
}