<?php

class ModelDef
{
  var $OnChange;
  
  function __construct()
  {
    $this->OnChange = array();
  }
  
  function DoOnChange()
  {
    foreach($this->OnChange as $Callback)
    {
      call_user_func($Callback);
    }
  }
  
  function RegisterOnChange($SysName, $Callback)
  {
    $this->OnChange[$SysName] = $Callback;
  }
  
  function UnregisterOnChange($SysName)
  {
    unset($this->OnChange[$SysName]);
  }
}

class Application extends System
{
  var $Name;
  /** @var AppModuleManager */
  var $ModuleManager;
  var $Modules;
  var $Models;
  
  function __construct()
  {
    parent::__construct();
    $this->Name = 'Application';
    $this->ModuleManager = new AppModuleManager($this);
    $this->Modules = array();
    $this->Models = array();
  }
  
  function RegisterModel($SysName, $Model)
  {
    $NewModelDef = new ModelDef();
    $NewModelDef->Title = $Model['Title'];
    $this->Models[$SysName] = $NewModelDef;
  }

  function UnregisterModel($SysName)
  {
    unset($this->Models[$SysName]);
  }
  
  function Run()
  {

  }
}