import wx
import wx.adv
import wx.lib.embeddedimage


APPLICATION_MINIMUM_SIZE = (300, 250)
TEXT_FIELD_SIZE = (250, 20)
IMAGE_DATA = wx.lib.embeddedimage.PyEmbeddedImage(
    b'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAACdtJ'
    b'REFUaIHVmmuQU+UZx38n55acc5LNZi+wLDfBwgxUBwcrKiiW4pRWrBXEjlYtlNKp/SBaHOhU'
    b'q0UFO7YdrbTjjNapvQjTD3ZULtZ6bVVUpCAoXe73RXY3yeaec8lJ+iG7YaObbLKoY5+PeZ9z'
    b'zu//vM/7vM97TgTBI/JFtm2XzSqIPh/T//mSMNi45/MGqsf2LFpY0EeOwFRVtp47sbBn0cLC'
    b'x32+0AL853WSMy2MdJoGSaJz8xb+3dJcJkKqdHHezRVM0yz7TZQqun+q1rXtNvTkejT/R2Ts'
    b'XrQXdBzHwT9xIrGeHl5WlcJcyxagigDTNOmNxQYdk2W5bihFUWryi3Y8TENyPZq/iUQiyX07'
    b'bJoTLj9IpxFPnUIUBFKOw0sChSsLCHWF9LMEB0gcewZ/5FdoDa1YZpYH12u8vccD2HTm8/zI'
    b'NPG6LhlJorelBbp7Ks/A2cDXA91vme63EI/eiREqwj++xeC5N3Ol8U2xGB8pLndJIqdNASIR'
    b'oMoiHpjvtcIrijIseCexH3fvMhoaDFzXZdP2kfxh05nxcCRMzrH5zjKB5p/mUQIOSccBQKi0'
    b'D1iWWYjH4zVDDAccIG9FSLz3TZqNDADvHhjBrQ/14tjF6CeSScLhMHffDNfP8eBVRbJhgWm3'
    b'u9UX8WcNLkse8k6K2PtLaDYyiKLI/q42Vv7+DLxpWcR6oyy9SuD6OQJeVURVRCbf7pQ2tbMS'
    b'UC+8LJ3JWCeXJ/H+bTSrRxDVIF2JRn6yLkO0N1vyiUajXHlhnuXXFSOv+UTGLHTKduRhCTgb'
    b'cEEopmyq4x50dydSoI24GWLVY2kOH+0p+YUjYaaONblvqYhX9QwKPywBtcIPBt1vyUOP4Utv'
    b'xAiOwswZrPmrzLadHaXxRDJJs5Hi0eUSDYZQER7qbCXqhRcE8RPw6VOb8XQ/iRE6lxwhHv/H'
    b'CDa+uKs0bloWYr6Xdcs9tDQW4V3j4orPqllAPfCDgQOY0R0Ujq0lEBpLLu/l+R3n8sTTb5T5'
    b'ZFIRfv3jAl8aU0wbwTeJbv/Pz05ALfCy5CnBD2a5zHGc/SvRg+PICX62nbyQ+x/eXKo4UMz7'
    b'+xbbzJhSXLCy1sZR9R48crDic4dcA7XCVwIHcO042Y47MELtABxOXMKqNevJZs5UnEQyya3z'
    b'08y7WELziShePwc8PwNlJIqqVrx31RkYCn6oqIuSRKHgYu5dgeE3EEUvYfdS7lj9PD3d4ZKf'
    b'aVlcdWGMpfOLkdd8Kge5A1OciCiKKFU6gbM+D1SDd3M5MvvuRfM6SEqQONNYsfZ1Dh06WuZ7'
    b'wfgId90inIF3l5EQpiNJErKsDH8GqtlQkQcwj/wWzXMCyTuCdGECq3+3i90f7CnzHRno4cFl'
    b'Tgn+hDuf0+7lyIqMqsgoqopaRcCwNrJK8AMbwMzxDQjp7UjBibgFL+s2nOTl17aWLVq/GudX'
    b'PzQJBRU0n0pPfgYHzQXoulqKvmEY6LpekaXuGagFPtv1GkSfRwtNwS14+dOWLH/7+6tl8KqU'
    b'5aFlKcaNktB8KsnCZHYmliDLcin6hmFgGMantwYG7q6V4O3YhxQ+erwI7wpsedtl3RObyioO'
    b'wC9uijF1ggevKmELbbwT/X4x35Vi9HXDjz8QQFEUvF7v2QsYuLtWgs+lT5I7uqYEv20vPPDI'
    b'xk/Ar1jQzczzwatKyKqff3UtpSA2lKJv6HopdXw+X1WuumagGrxrxcjsuxstNIWC4GPfcVi5'
    b'ZgvxWKLsmu/NjXLNLLcE//LJpWTc5lL0vapSSh2fz4c8xIuEmgRUSp1+yzkWmY5VBEKjEeQg'
    b'x0+luHPNC2W1HuAbF2VY/HULryqhaxJvnLyOiDUWRVVL0Q80BAk1NWHo+pDwNQuA6tHP7LsX'
    b'n+bD4xtHuKebO9e+XtYaA3xlssnKRXF0rQi/tXMeRxKTkGUZr6qiKCrBhgaa+uCr5X1dAoZq'
    b'E9IHfoNWOIzSMJVYzyFW/fINPug4VeYzaUyO1bfESvC7umewq+siVFUtRd/v1wk1NaHXAV+T'
    b'gMGsP/qZ4xvw9G5Ebr6MVHQvD6zbypvby+HbmgqsWRyhOSiiaxIHolN5/fAVxZTpi75uGDQ3'
    b'txAKhfD5fDi53GCPHdSqJtlgud8Pn+jahefY/RhjFmD2dvDok+/ywlvl1cavCaxdEmbcSA+6'
    b'JtGdaWPL3rkoXrUs+sGGBkJNTWX1vlYRQ66SSumT6E2iqdMxez/k6Wf/y1Mby8dlRWL1Ld1M'
    b'PaeArkkkrEY27LgaJG9Z9FtbW4rwioLtOND3uqR0nyFSeFithJvLkXMSpI2bOXjwWR55Zj9w'
    b'JmKyIrFiQZRZ57nomoTt+vjLe/Ow8waGoiJLEoqqEmxspLExhGEY2LZdut7pEyHLMrZdvSuu'
    b'S0B/+qSiJ4oPsiP4Q5OYN7uTjS+dOdPeNCfOgsssdE0Cj8Kft36NmNmEYRQjr3q9+A2D1tZW'
    b'/IEAjuNgWRa2ZRVnYYAZhsE7/3l/eAIqpk/4AHk3jpXqwsp0sXBuM062iVe2xZk7LcGtV2fQ'
    b'NQlF8fDUm5dwIjYKwyhuVLIkEQgEaG1twTAMLMsilUphWxaOY2PZDrm+/A8EQxzZvZsbFy0c'
    b'9EA/pIDBzM3lSEaOIggZrEwXZrobK3Oa+TNh5pcNLp4QLsE/t/MC9oUnl3bWxsZGAoEAzS0t'
    b'NDaGsPvgU+k02UyWjGlScHPoukH76Ha6u7u55tvXVoSvS8DA9MnZUfJuHDPdTc6O4zoZPKKX'
    b'tvYmegqtjPLs5N2jk/kwMpsJ57TQ0tqKrhsEgwF0w1+qNqlUis7OTjKZNJqmM2pkKyNGtmEY'
    b'BocOHmDu3CurwtcloN/27N6Olo9jm/EifC6LKGuIkg/F18qpXpWO8EwCI6Yy+4pibe+fgX5L'
    b'pVKkUili8TjJVIobb7gBKJbOeDzOoYMHuOTSWUPCD0vAH9dvJujr5VuzAwiAKPkoCD4yuRZM'
    b'YRrjLphW7GUMo/i2WpZLx0vbcbBtG9uySMRjxBNJvH2nreHA1y3gyOHD7N2/n1QqzenTXhZf'
    b'O5Fg0xQa2i8nOGoKuq6XgIFSMzZwU+qPfjKZJptJM3r06BL88WPH6oKvW8Brr75KKlVccHll'
    b'EoFJy5l+0Ywyn2odZH+tdxwb2y6WzbFjxw4r8sMS8MorLzLnq1eweMlSzjv//E+AV9v+CwW3'
    b'KMKysGwHx3Fo6NvEhgsPQ3zgcAcAFQouXd1h2tvbB/WvFnknlyObzWLbNtFIhNNdXYR7ehg/'
    b'fjyOYw8bHuroRiVZrQg/ELRWa25pIRaPnxU8fI4fugd2tpoRIBLtranOD2UV512WpJqOdB+/'
    b'ppIJglgsq4FGPtixi6XfveGs4Yv3/YL/2WMo+0L/V6IW+78X8D/DRu4vf5sVkQAAAABJRU5E'
    b'rkJggg==')


class TaskBarIcon(wx.adv.TaskBarIcon):

    def __init__(self, parent):
        super().__init__()

        self.parent = parent

        self.taskBarIcon = IMAGE_DATA.GetIcon()
        self.SetIcon(self.taskBarIcon)

        self.Bind(event=wx.EVT_MENU,
                  handler=self.OnExit,
                  id=wx.ID_EXIT)

    def CreatePopupMenu(self):
        self.popupMenu = wx.Menu()
        self.popupMenu.Append(item="&Exit\tCtrl+E",
                              id=wx.ID_EXIT)
        return self.popupMenu

    def OnExit(self, event):
        # SJB Don't do anything if we are already exiting!
        if not self.parent.exitDialogShowing:
            self.parent.Close()


class Window(wx.Frame):

    def __init__(self):
        super().__init__(parent=None,
                         title="Playground")

        self.Bind(event=wx.EVT_CLOSE,
                  handler=self.OnMainWindowClose)

        self.fileMenu = wx.Menu()

        self.fileMenu.Append(item="&Exit\tCtrl+E",
                             helpString="Ask whether to exit the application.",
                             id=wx.ID_EXIT)
        self.Bind(event=wx.EVT_MENU,
                  handler=self.OnFileExit,
                  id=wx.ID_EXIT)

        self.menuBar = wx.MenuBar()
        self.menuBar.Append(title="&File",
                            menu=self.fileMenu)
        self.SetMenuBar(self.menuBar)

        self.panel = wx.Panel(parent=self)
        self.panel.SetBackgroundColour("yellow")

        self.CreateStatusBar()

        self.labelOfTextFieldForURL = wx.StaticText(parent=self.panel,
                                                    label="URL:")
        self.textFieldForURL = wx.TextCtrl(parent=self.panel,
                                           size=TEXT_FIELD_SIZE)

        self.labelOfTextFieldForSearchTerm = wx.StaticText(parent=self.panel,
                                                           label="Search term:")
        self.textFieldForSearchTerm = wx.TextCtrl(parent=self.panel,
                                                  size=TEXT_FIELD_SIZE)

        self.buttonCount = wx.Button(parent=self.panel,
                                     label="Count")
        self.buttonCount.Bind(event=wx.EVT_BUTTON,
                              handler=self.OnButtonCount)

        self.sizer1 = wx.BoxSizer(orient=wx.HORIZONTAL)
        self.sizer2 = wx.BoxSizer(orient=wx.HORIZONTAL)
        self.sizer3 = wx.BoxSizer(orient=wx.VERTICAL)

        self.sizer1.Add(window=self.labelOfTextFieldForURL,
                        border=5,
                        flag=wx.ALL | wx.ALIGN_CENTER)
        self.sizer1.Add(window=self.textFieldForURL,
                        border=5,
                        flag=wx.ALL | wx.ALIGN_CENTER)
        self.sizer2.Add(window=self.labelOfTextFieldForSearchTerm,
                        border=5,
                        flag=wx.ALL | wx.ALIGN_CENTER)
        self.sizer2.Add(window=self.textFieldForSearchTerm,
                        border=5,
                        flag=wx.ALL | wx.ALIGN_CENTER)
        self.sizer3.AddStretchSpacer()
        self.sizer3.Add(sizer=self.sizer1,
                        border=5,
                        flag=wx.ALL | wx.ALIGN_CENTER)
        self.sizer3.Add(sizer=self.sizer2,
                        border=5,
                        flag=wx.ALL | wx.ALIGN_CENTER)
        self.sizer3.Add(window=self.buttonCount,
                        border=5,
                        flag=wx.ALL | wx.ALIGN_CENTER)
        self.sizer3.AddStretchSpacer()

        self.panel.SetSizer(self.sizer3)
        self.panel.Layout()
        self.exitDialogShowing = False  # SJB Flag for exit dialog
        self.taskBarIcon = TaskBarIcon(parent=self)

        self.SetMinSize(APPLICATION_MINIMUM_SIZE)
        self.Center()

    def OnMainWindowClose(self, event):
        self.exitDialogShowing = True  # SJB Flag that the dialog is showing
        dialog = wx.MessageDialog(parent=self,
                                  caption="Exit Playground",
                                  message="Are you sure to exit Playground?",
                                  style=wx.YES_NO | wx.ICON_QUESTION)

        if dialog.ShowModal() == wx.ID_YES:
            self.taskBarIcon.Destroy()
            self.Destroy()
        else:
            dialog.Destroy()
            self.exitDialogShowing = False  # SJB Clear Flag

    def OnFileExit(self, event):
        self.Close()

    def OnButtonCount(self, event):
        pass


if __name__ == "__main__":
    application = wx.App()

    applicationWindow = Window()
    applicationWindow.Show()

    application.MainLoop()
