# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals


from gi.repository import Gtk
from ava.user.models import Notice


def inform(title, message):
    dialog = Gtk.MessageDialog(None, 0, Gtk.MessageType.INFO,
                               Gtk.ButtonsType.OK, title)
    dialog.format_secondary_text(message)
    dialog.run()
    dialog.destroy()


def alert(title, message):
    dialog = Gtk.MessageDialog(None, 0, Gtk.MessageType.WARNING,
                               Gtk.ButtonsType.OK, title)
    dialog.format_secondary_text(message)
    dialog.run()
    dialog.destroy()


def error(title, message):
    dialog = Gtk.MessageDialog(None, 0, Gtk.MessageType.ERROR,
                               Gtk.ButtonsType.OK, title)
    dialog.format_secondary_text(message)
    dialog.run()
    dialog.destroy()


def confirm(title, message):
    dialog = Gtk.MessageDialog(None, 0, Gtk.MessageType.QUESTION,
                               Gtk.ButtonsType.YES_NO, title)
    dialog.format_secondary_text(message)
    response = dialog.run()

    dialog.destroy()
    return response == Gtk.ResponseType.YES


def input(title, message):
    dialog = Gtk.MessageDialog(None,
                               (Gtk.DialogFlags.MODAL |
                                Gtk.DialogFlags.DESTROY_WITH_PARENT),
                               Gtk.MessageType.QUESTION,
                               Gtk.ButtonsType.OK_CANCEL,
                               title)
    dialog.format_secondary_text(message)

    dialogBox = dialog.get_content_area()
    userEntry = Gtk.Entry()
    # userEntry.set_visibility(True)
    # userEntry.set_invisible_char("*")
    userEntry.set_size_request(250, 0)
    userEntry.set_text("")
    dialogBox.pack_end(userEntry, False, False, 0)

    dialog.show_all()
    response = dialog.run()
    text = userEntry.get_text()
    dialog.destroy()
    if response == Gtk.ResponseType.OK:
        return text
    else:
        return None


def show_notice(notice):
    if notice.kind == Notice.WARNING:
        alert(title=notice.title, message=notice.message)
    elif notice.kind == Notice.ERROR:
        error(title=notice.title, message=notice.message)
    else:
        inform(title=notice.title, message=notice.message)


def _test():
    inform(message="Sample message", title='msgbox.inform')
    alert(message="Alert message", title='msgbox.alert')
    error(message="Error message", title='msgbox.error')

    p = confirm(message="You are trying to do something dangerous",
                title="Are you sure?")
    if p:
        inform("Your answer", "You agreed.")
    else:
        inform("Your answer", "You disagreed.")

    print(input("Input Text", "Please enter your name:"))

if __name__ == '__main__':
    _test()