import urwid

from discurses.ui.lib import TextEditWidget
import logging

logger = logging.getLogger(__name__)


class HasModal:

    def __init__(self, main_widget):
        self._main_widget = main_widget
        self._pop_up = urwid.Frame(urwid.WidgetPlaceholder(None))
        self._w_placeholder = urwid.WidgetPlaceholder(self._main_widget)
        self._pop_up_overlay = urwid.Overlay(urwid.LineBox(self._pop_up),
                                            self._main_widget,
                                            'center',
                                            ('relative', 60),
                                            'middle',
                                            ('relative', 60))

    def open_pop_up(self,
                    widget,
                    header=None,
                    footer=None,
                    height=('relative', 60),
                    width=('relative', 60)):
        self._pop_up.body.original_widget = widget
        self._pop_up.header = header
        self._pop_up.footer = footer
        self._pop_up_overlay.set_overlay_parameters('center', width, 'middle',
                                                    height)
        self._w_placeholder.original_widget = self._pop_up_overlay
        self._pop_up.set_focus("body")

    def open_text_prompt(self, callback, title="", content=""):
        self.open_pop_up(
            urwid.Filler(TextEditWidget(
                callback, content=content)),
            header=urwid.Text(
                title, align='center'),
            height=6,
            width=50)

    def open_confirm_prompt(self, callback, title="", content="",
                            yestxt="Yes", notxt="No", align="center"):
        def create_cb(bool):
            def res(*k, **a):
                callback(bool)
                self.close_pop_up()
            return res
        self.open_pop_up(
            urwid.Filler(urwid.Text(content, align=align)),
            header=urwid.Text(
                title, align='center'),
            footer=urwid.Columns([
                (urwid.Button(yestxt, create_cb(True))),
                (urwid.Button(notxt, create_cb(False))),
            ]),
            height=6,
            width=50)
        self._pop_up.set_focus("footer")
        logger.debug("Confirm prompt text: " + str(content))

    def close_pop_up(self):
        self._pop_up.body.original_widget = None
        self._pop_up.header = None
        self._pop_up.footer = None
        self._pop_up_overlay.set_overlay_parameters('center', ('relative', 60),
                                                   'middle', ('relative', 60))
        self._w_placeholder.original_widget = self._main_widget