from gooey.gui.widgets import components2

__author__ = 'Chris'

import unittest
import wx
from wx.lib.scrolledpanel import ScrolledPanel

TEXT_FIELD = components2.TextField({
  'display_name': 'cool title',
  'help_msg': 'a help message',
  'nargs': '+',
  'commands': ['-f', '--fudge'],
  'choices': []
})

DROPDOWN = components2.Dropdown({
  'display_name': 'cool title',
  'help_msg': 'a help message',
  'nargs': '+',
  'commands': ['-f', '--fudge'],
  'choices': ['one', 'two', 'three']
})

COUNTER = components2.Counter({
  'display_name': 'cool title',
  'help_msg': 'a help message',
  'nargs': '+',
  'commands': ['-f', '--fudge'],
  'choices': []
})

CHECKBOX = components2.CheckBox({
  'display_name': 'cool title',
  'help_msg': 'a help message',
  'nargs': '+',
  'commands': ['-f', '--fudge'],
  'choices': []
})

RADIOGROUP = components2.RadioGroup({
  'display_name': 'mutux options',
  'data': [{
    'help_msg': 'a help message',
    'nargs': '+',
    'commands': ['-f', '--fudge'],
    'choices': []
   }, {
    'help_msg': 'a help message',
    'nargs': '+',
    'commands': ['-g', '--gudge'],
    'choices': []
  }]
})


class TestPanel(ScrolledPanel):
  def __init__(self, parent, widget):
    ScrolledPanel.__init__(self, parent)
    self.SetupScrolling(scroll_x=False)

    sizer = wx.BoxSizer(wx.VERTICAL)
    self.widget = widget

    sizer.Add(self.widget.build(self), 0, wx.EXPAND)
    self.SetSizer(sizer)


class MyFrame(wx.Frame):
  def __init__(self, parent, widget):
    wx.Frame.__init__(self, parent, title="test", size=(320, 240))
    self.SetBackgroundColour('#ffffff')
    self.panel = TestPanel(self, widget)
    self.Show()

  def get_widget(self):
    return self.panel.widget

  def close(self):
    self.Destroy()



class TestComponents(unittest.TestCase):

  def setUp(self):
    self.app = wx.App(False)
    self.frame = None

  def tearDown(self):
    # self.app = wx.App(False)
    self.frame.Destroy()
    self.frame = None

  def test_textfield_returns_option_and_value_else_none(self):
    self.build_test_frame(TEXT_FIELD)
    self.assertTrue(self.get_value() == '')
    self.get_widget().SetLabelText('value')
    self.assertEqual('-f value', self.get_value())


  def test_dropdown_returns_option_and_value_else_none(self):
    self.build_test_frame(DROPDOWN)
    self.assertTrue(self.get_value() == '')
    # grab first item from the combo box
    self.frame.get_widget()._GetWidget().SetSelection(0)
    self.assertEqual('-f one', self.get_value())


  def test_counter_returns_option_and_value_else_none(self):
    self.build_test_frame(COUNTER)
    self.assertTrue(self.get_value() == '')
    # counter objects stack,
    # so
    #   1 = -f,
    #   4 = -ffff
    self.frame.get_widget()._GetWidget().SetSelection(0)
    self.assertEqual('-f', self.get_value())
    self.frame.get_widget()._GetWidget().SetSelection(4)
    self.assertEqual('-fffff', self.get_value())


  def test_checkbox_returns_option_if_checked_else_none(self):
    self.build_test_frame(CHECKBOX)
    self.assertTrue(self.get_value() == '')
    self.frame.get_widget()._GetWidget().SetValue(1)
    self.assertEqual('-f', self.get_value())


  def test_radiogroup_returns_option_if_checked_else_none(self):
    self.build_test_frame(RADIOGROUP)
    self.assertTrue(self.get_value() == '')
    # self.frame.get_widget()._GetWidget()[0].SetValue(1)
    # self.assertEqual('-f', self.get_value())


  def build_test_frame(self, widget):
    # self.app = wx.App(False)
    self.frame = MyFrame(None, widget)

  def get_widget(self):
    return self.frame.get_widget()._GetWidget()

  def get_value(self):
    return self.frame.get_widget().GetValue()



if __name__ == '__main__':
  unittest.main()




  # a = {
  # 'required' : [
  #     {
  #       'component': 'TextField',
  #       'data': {
  #         'display_name': 'filename',
  #         'help_text': 'path to file you want to process',
  #         'command_args': ['-f', '--infile']
  #       }
  #     },
  #     {
  #       'component': 'FileChooser',
  #       'data': {
  #         'display_name': 'Output Location',
  #         'help_text': 'Where to save the file',
  #         'command_args': ['-o', '--outfile']
  #       }
  #     }
  #   ],
  #   'optional' : [
  #     {
  #       'component': 'RadioGroup',
  #       'data': [
  #         {
  #           'display_name': 'Output Location',
  #           'help_text': 'Where to save the file',
  #           'command_args': ['-o', '--outfile']
  #         }, {
  #           'display_name': 'Output Location',
  #           'help_text': 'Where to save the file',
  #           'command_args': ['-o', '--outfile']
  #         }
  #       ]
  #     }
  #   ]
  # }
  #
  #   ]
  # }