import { Gtk, Gdk } from "astal/gtk4";

export type If<Condition, Then, Else> = Condition extends true ? Then : Else;
export type Belongs<T, U> = {
    [K in keyof T]: T[K] extends U ? K : never;
}[keyof T];

export const hideWindow = (self: Gtk.Window, keyval: number) => {
    const keys = ["quick_settings"].includes(self.name)
        ? [Gdk.KEY_Escape]
        : [
            Gdk.KEY_Escape,
            Gdk.KEY_Super_L,
            Gdk.KEY_Super_R
        ];

    if (keys.some(key => key === keyval)) self.hide();
}

export const openOnButton = (event: Gdk.ButtonEvent, keyval: number) => (action: () => void) => {
    if (event.get_button() !== keyval) return;

    action();
}

export const limit = <T>(list: T[], max: number) => list.filter((_, i) => i <= (max - 1));
export const skip = <T>(list: T[], items: number) => list.filter((_, i) => {
    if (items < 0) items = 0;
    if (items > (list.length - 1)) items = list.length;
    
    return i > (items - 1);
});