import RegularWindow from "widget/RegularWindow"
import layout from "./layout"
import icons from "lib/icons"
import options from "options"

const current = Variable(layout[0].attribute.name)

const Header = () => Widget.CenterBox({
    class_name: "header",
    start_widget: Widget.Button({
        class_name: "reset",
        on_clicked: options.reset,
        hpack: "start",
        vpack: "start",
        child: Widget.Icon(icons.ui.refresh),
        tooltip_text: "Reset",
    }),
    center_widget: Widget.Box({
        class_name: "pager horizontal",
        children: layout.map(({ attribute: { name, icon } }) => Widget.Button({
            xalign: 0,
            class_name: current.bind().as(v => `${v === name ? "active" : ""}`),
            on_clicked: () => current.value = name,
            child: Widget.Box([
                Widget.Icon(icon),
                Widget.Label(name),
            ]),
        })),
    }),
    end_widget: Widget.Button({
        class_name: "close",
        hpack: "end",
        vpack: "start",
        child: Widget.Icon(icons.ui.close),
        on_clicked: () => App.closeWindow("settings-dialog"),
    }),
})

const PagesStack = () => Widget.Stack({
    transition: "slide_left_right",
    children: layout.reduce((obj, page) => ({ ...obj, [page.attribute.name]: page }), {}),
    shown: current.bind() as never,
})

export default () => RegularWindow({
    name: "settings-dialog",
    class_name: "settings-dialog",
    title: "Settings",
    setup(win) {
        win.on("delete-event", () => {
            win.hide()
            return true
        })
        win.set_default_size(500, 600)
    },
    child: Widget.Box({
        vertical: true,
        children: [
            Header(),
            PagesStack(),
        ],
    }),
})
