import { App, Astal, Gdk, Gtk } from "astal/gtk4";
import Hyprland from "./modules/Hyprland";
import Calendar from "./modules/Calendar";
import QuickView from "./modules/QuickView";
import SystemInfo from "./modules/SystemInfo";
import { CenterBox } from "astal/gtk4/widget";

const Bar = ( { gdkmonitor, name }: { gdkmonitor: Gdk.Monitor, name: string } ) => {
    const { TOP, LEFT, RIGHT } = Astal.WindowAnchor;

    return (
        <window
            gdkmonitor={gdkmonitor}
            cssClasses={["Bar"]}
            name={name}
            namespace={"bar"}
            exclusivity={Astal.Exclusivity.EXCLUSIVE}
            anchor={TOP | LEFT | RIGHT}
            visible
            application={App}
            child={
                <CenterBox
                    orientation={Gtk.Orientation.HORIZONTAL}
                    startWidget={
                        <box
                            hexpand
                            halign={Gtk.Align.START}
                        >
                            <Calendar.Time />
                            <SystemInfo.SystemInfo />
                            <Hyprland.Workspace />
                        </box>
                    }
                    centerWidget={<Hyprland.ActiveWindow />}
                    endWidget={
                        <box
                            hexpand
                            halign={Gtk.Align.END}
                            cssClasses={["BarRight"]}
                        >
                            <Hyprland.SysTray />
                            <QuickView.QuickView />
                        </box>
                    }
                ></CenterBox>
            }
        ></window>
    );
};

const cliHandler = (args: string[]): string => {
    return "Not implemented";
};

const BarLauncher = ( monitor: Gdk.Monitor ) =>  {
    const windowName = `bar-${monitor.get_connector()}`
    const createBar = () => {
        return <Bar gdkmonitor={monitor} name={windowName}></Bar>
    }

    // Actually start the bar
    createBar();

    return windowName;
}

export default {
    BarLauncher,
    cliHandler,
};
