module OrbitApp
    module Module
      module FrontendUtility
          Version = "0.2"

          module ClassMethods
            @@frontend_pages = {}
            #Record all frontend pages of orbit

          def add(key,var) #build @@frontend_pages
            if @@frontend_pages[key].nil?
              @@frontend_pages[key]= {"frontend"=>var}
            else
              @@frontend_pages[key]["frontend"]= var
            end
          end

          def add_default_widget(key,var)
            @@frontend_pages[key]["default_widget"]= var
          end

          def all #return all frontend_pages of orbit
            return @@frontend_pages
          end
        end
      
        extend ClassMethods
        def self.included( other )
          other.extend( ClassMethods )
        end

        class AppPageSet # From Registration
          def initialize(name,key,&block)
            @frontend_pages = [] 
            block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
            OrbitApp::Module::FrontendUtility.add(key,@frontend_pages)
          end

          def app_page(name,&block)
            @frontend_pages << AppPage.new(name,&block)
          end

          def to_module_app_format #For ModuleApp to fetch data
            result = {}
            @frontend_pages.collect do |t| 
              result[t.name] = {:i18n=>t.get_i18n,:style=>t.get_style}
            end
            result
          end

        end

        class AppPage
          attr_reader :name
          attr_reader :style
          def initialize(name,&block)
            @style
            @name = name
            @frontend_i18n = 'rulingcom.errors.init.app_page_noname'
            block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
          end
          
          def frontend_i18n(i18n)
            @frontend_i18n = i18n
          end

          def get_i18n
             @frontend_i18n
          end

          def finalize!

          end

          def get_style
            @style
          end

          def style(ary)# []
            @style = ary
          end

          protected
          
        end# of AppPage
    end # of FrontendUtility
  end # of Module
end # of OrbitApp