# Released under the MIT License. See LICENSE for details.
#
"""UI functionality related to master-server connectivity."""

from typing import TYPE_CHECKING

import bauiv1 as bui
from bauiv1 import _commonassets

if TYPE_CHECKING:
    from typing import Callable, Any


class ConnectWindow(bui.Window):
    """Window for preparing to connect to a game.

    Shows progress while wrangling credentials, asks for password, or
    anything else necessary to prepare for a connection.
    """

    def __init__(
        self,
    ) -> None:
        self._width = 650
        self._height = 300
        super().__init__(
            root_widget=bui.containerwidget(
                size=(self._width, self._height),
                transition='in_scale',
                parent=bui.get_special_widget('overlay_stack'),
            )
        )
        bui.textwidget(
            parent=self._root_widget,
            position=(self._width * 0.5, self._height * 0.7),
            size=(0, 0),
            scale=1.2,
            h_align='center',
            v_align='center',
            text=_commonassets.strings.status.connecting,
            maxwidth=self._width * 0.9,
        )

        self._spinner = bui.spinnerwidget(
            parent=self._root_widget,
            position=(self._width * 0.5, self._height * 0.54),
            style='bomb',
            size=48,
        )

        self._info_text = bui.textwidget(
            parent=self._root_widget,
            position=(self._width * 0.5, self._height * 0.4),
            size=(0, 0),
            color=(0.6, 0.5, 0.6),
            flatness=1.0,
            shadow=0.0,
            scale=0.75,
            h_align='center',
            v_align='center',
            text='HELLO THERE',
            maxwidth=self._width * 0.9,
        )
        self._info_text_str = ''

        cancel_button = bui.buttonwidget(
            parent=self._root_widget,
            autoselect=True,
            position=(50, 30),
            size=(150, 50),
            label=_commonassets.strings.actions.cancel,
            on_activate_call=self._cancel,
        )
        bui.containerwidget(edit=self._root_widget, cancel_button=cancel_button)
        self._update_timer = bui.AppTimer(
            0.113, bui.WeakCallStrict(self._update), repeat=True
        )

    def _update(self) -> None:
        print('updating...')

    def _cancel(self) -> None:
        if not self._root_widget or self._root_widget.transitioning_out:
            return
        bui.containerwidget(
            edit=self._root_widget,
            transition=('out_scale'),
        )
