require('lib/setup')
Spine = require('spine')
Session = require("models/session")
User = require("models/standard/user")

class Platform extends Spine.Controller

  elements:
    ".platformCanvas" : "platformCanvas"

  constructor: ->
    super
    Spine.session = Session.create @options.session if @options.session
    Spine.options = @options

    LazyLoad.js "/#{@options.app}.js?width=#{$(window).width()}", =>
      Spine.apps = {}
      for path in Spine.applicationPaths
        Spine.apps[path.replace(/\//g,'.')] = require(path)
        
      MainController = require("mainController")
      Spine.mainController = new MainController(el: @el)
      @navigate ""
      @setupRoutes()
      @navigate "/"


  setupRoutes: =>
    homeAppNameString = Spine.options.initApp || "web/home"
    homeAppName = require("#{homeAppNameString}") 

    @routes
      "/": =>
        @currentApp?.reset?()
        @currentApp = new homeAppName()
        @platformCanvas.html @currentApp.el
        @registerBackButtons("unbind")

      "/app/:appName/*glob": (params) =>
        @currentApp?.reset?()
        @goToApp(params.appName,params.glob)
        
      "/app/:appName": (params) =>
        @currentApp?.reset?()
        @goToApp(params.appName)

  goToApp: (appName , params = null) =>
    appClass = Spine.apps[appName]
    params = JSON.parse params
    Spine.currentPath = appName
    @currentApp = new appClass(params: params )
    @platformCanvas.html @currentApp.el
    @registerBackButtons("bind")
  
  registerBackButtons: (type) =>
    $(".btn_goBack")[type] "click" , =>
      @currentApp.navigate "/"
    
module.exports = Platform