class Controller(object):
        """docstring for Controller"""
        def __init__(self, interface):
                super(Controller, self).__init__()

                if interface == "GUI":
                  self.view = GUI.App()
                elif interface == "CLI":
                  self.view = CLI.App()
                self.model = Model()
                self.listenEvent=None #will change when user inputs something
                self.view.callback = self.gameLoop #The View will call al the changes here
                self.view.refresh(self.model.gameboard,
                                      self.model.doctor,
                                      self.model.daleks,
                                      self.model.scrapHeaps,
                                      self.model.level
                                      )
                self.view.run()
    

        # Has to be looped by the view manually
        def gameLoop(self, userAction):
                returnCode = ReturnCodes.SUCCESS
                if returnCode != ReturnCodes.DEAD_DOCTOR:
                        returnCode = self.playTurn(userAction)
                        if returnCode == ReturnCodes.END_WAVE:
                                        self.model.changeLevel()

                if returnCode == ReturnCodes.DEAD_DOCTOR:
                        self.view.refresh(self.model.gameboard,
                                          self.model.doctor,
                                          self.model.daleks,
                                          self.model.scrapHeaps,
                                          self.model.level
                                          )
                        self.view.printGameOver()
                        sys.exit(0)


                self.view.refresh(self.model.gameboard,
                                          self.model.doctor,
                                          self.model.daleks,
                                          self.model.scrapHeaps,
                                          self.model.level
                                          )
                
                




        def playTurn(self, userAction):
                # Everything has been inited in the Views and the Model Constructors
                self.view.refresh(self.model.gameboard,
                                  self.model.doctor,
                                  self.model.daleks,
                                  self.model.scrapHeaps,
                                  self.model.level)

                if userAction == UserAction.ZAP:
                        returnCode = self.model.zap() # ZAP
                elif userAction == UserAction.TELEPORT:
                        returnCode = self.model.teleportDoctor() # TELEPORT
                elif userAction == UserAction.EXIT_GAME:
                        sys.exit(0)
                else:
                        returnCode = self.model.moveDoctor(userAction) # MOVE
                if returnCode == ReturnCodes.SUCCESS:
                         returnCode = self.model.moveDaleks()

                return returnCode