const DEFAULT_WINDOW_PARAMS = 'toolbar=no, menubar=no, width=600, height=700, top=100, left=100';

export const useOauthWindow = () => {
    let oauthWindow: Window | null = null;

    const openOauthWindow = (
        url: string,
        name: string,
        messageHandler: (e: MessageEvent) => void,
        params: string = DEFAULT_WINDOW_PARAMS,
    ) => {
        const handler = (event: MessageEvent) => {
            const { data } = event;

            if (data.messageType === 'oAuth') {
                messageHandler(event);
                window.removeEventListener('message', handler);
            }
        }

        window.removeEventListener('message', handler);

        if (!oauthWindow || oauthWindow.closed) {
            // окно ещё не существует, либо было закрыто
            oauthWindow = window.open(url, name, params)!;
        } else {
            // окно уже существует
            oauthWindow!.focus();
        }

        window.addEventListener('message', handler);
    }

    return {
        oauthWindow,
        openOauthWindow,
    }
}
