import App from 'resource:///com/github/Aylur/ags/app.js';

import { timeout } from 'resource:///com/github/Aylur/ags/utils.js';
import { Stack } from 'resource:///com/github/Aylur/ags/widget.js';

import PopupWindow from '../misc/popup.ts';

// Types
import { BoxGeneric, StackGeneric } from 'global-types';

// Import all the OSDs as an array
const OSDList = [] as Array<(stack: StackGeneric) => BoxGeneric>;

import * as Modules from './osds.ts';
for (const osd in Modules) {
    OSDList.push(Modules[osd]);
} // Array

const HIDE_DELAY = 2000;
const transition_duration = 300;


const OSDs = () => {
    const stack = Stack({
        transition: 'over_up_down',
        transition_duration,

        attribute: { popup: (osd: BoxGeneric) => {
            if (!osd) {
                console.log();
            }
        } },
    });

    // Send reference of stack to all items
    stack.items = OSDList.map((osd, i) => [`${i}`, osd(stack)]);

    // Delay popup method so it
    // doesn't show any OSDs at launch
    timeout(1000, () => {
        let count = 0;

        stack.attribute.popup = (osd: BoxGeneric) => {
            ++count;
            stack.set_visible_child(osd);
            App.openWindow('osd');

            timeout(HIDE_DELAY, () => {
                --count;

                if (count === 0) {
                    App.closeWindow('osd');
                }
            });
        };
    });

    return stack;
};

export default () => PopupWindow({
    name: 'osd',
    anchor: ['bottom'],
    exclusivity: 'ignore',
    close_on_unfocus: 'stay',
    transition: 'slide_up',
    transition_duration,
    bezier: 'ease',
    content: OSDs(),
});