'use strict'
if typeof window.DEBUG is "undefined"
    window.DEBUG = true

angular.module('shuttlerockApp', [
    'ngResource',
    'ui.router',
    'ui.directives',
    'ui.bootstrap',
    'ngCookies',
    'ngAnimate',
    'shuttlerockApp.resources',
    'shuttlerockApp.interceptors',
    'ngSanitize',
    'cookiesModule',
    'angularFileUpload',
    'pascalprecht.translate',
    'analytics',
    'monospaced.qrcode',
    'dialogs',
    'infinite-scroll',
    'ezfb',
    'akoenig.deckgrid',
    'LocalStorageModule'
])
  .config ($httpProvider, $translateProvider, $locationProvider, $stateProvider, $urlRouterProvider, Constants, $sceDelegateProvider, $rootScopeProvider) ->
    $httpProvider.defaults.useXDomain = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With']

    $httpProvider.interceptors.push('sitePasswordInterceptor');

    $locationProvider.html5Mode(true);
    #hen none of the defined urls match, redirect to /mobile

    $httpProvider.interceptors.push 'localeInterceptor'

    $urlRouterProvider
    .when('/mobile/', '/mobile')
    .when('/', '/mobile')
    .otherwise('/unknown')
    $sceDelegateProvider.resourceUrlWhitelist([
        'self',
        'https://s3.amazonaws.com/scratch.shuttlerock.com/**',
        'https://s3.amazonaws.com/aurora.shuttlerock.com/**',
        'https://s3.amazonaws.com/aurora-stg.shuttlerock.com/**',
        'https://s3.amazonaws.com/aurora-dev.shuttlerock.com/**',
        'https://d2a66jhuuzvyyo.cloudfront.net/**',
        'https://d3h9j6pjreamyv.cloudfront.net/**',
        'https://d2dq8ht19ichak.cloudfront.net/**'
    ])
    $stateProvider
    .state Constants.routes.unknown,
        url: "/unknown"
        templateUrl: assetPrefix + "/views/error-404.html",
        controller: 'ErrorCtrl as error'
    .state Constants.routes.top,
        url: "/"
        templateUrl: assetPrefix + "/views/boards-index.html"
        controller: "HomeCtrl as home"
    .state Constants.routes.home,
        url: "/mobile"
        templateUrl: assetPrefix + "/views/boards-index.html"
        controller: "HomeCtrl as home"
    .state Constants.routes.signin,
        url: "/mobile/signin/:publish"
        templateUrl: assetPrefix + "/views/sign-in.html"
        controller: "SignInCtrl as signin"
    .state Constants.routes.boardbase,
        url: "/mobile/content/:boardId"
        templateUrl: assetPrefix + "/views/boards-show.html"
        controller: "BoardBaseCtrl as boardbase"
    .state Constants.routes.boardshow,
        url: "/mobile/boards/:boardId"
        templateUrl: assetPrefix + "/views/boards-show.html"
        controller: "BoardBaseCtrl as boardbase"
    .state Constants.routes.boards,
        url: "/mobile/collections"
        templateUrl: assetPrefix + "/views/boards-index.html"
        controller: "BoardsCtrl as home"
    .state Constants.routes.contest,
        url: "/mobile/contest"
        templateUrl: assetPrefix + "/views/boards-index.html"
        controller: "ContestCtrl as home"
    .state Constants.routes.noncontest,
        url: "/mobile/noncontest"
        templateUrl: assetPrefix + "/views/boards-index.html"
        controller: "NonContestCtrl as home"
    .state Constants.routes.upload,
        url: "/mobile/collections/:boardId/upload"
        templateUrl: assetPrefix + "/views/entries-new-2-select-photo.html"
        controller: 'UploadCtrl as upload'
    .state Constants.routes.videoupload,
        url: "/mobile/collections/:boardId/uploadvideo"
        templateUrl: assetPrefix + "/views/entries-new-2-select-video.html"
        controller: 'VideoUploadCtrl as videoupload'
    .state Constants.routes.upload_photo_transloadit,
        url: "/mobile/collections/:boardId/uptl"
        templateUrl: assetPrefix + "/views/entries-new-2-select-photo-tl.html"
        controller: 'UptlCtrl as uptl'
    .state Constants.routes.user,
        url: "/mobile/collections/:boardId/user"
        templateUrl: assetPrefix + '/views/entries-new-1-user-name.html',
        controller: 'UserCtrl as user'
    .state Constants.routes.photo,
        url: "/mobile/collections/:boardId/photo"
        templateUrl: assetPrefix + '/views/entries-new-3-photo-name.html',
        controller: 'PhotoCtrl as photo'
    .state Constants.routes.email,
        url: "/mobile/collections/:boardId/email"
        templateUrl: assetPrefix + '/views/entries-new-4-email.html',
        controller: 'EmailCtrl as email'
    .state Constants.routes.info,
        url: "/mobile/info"
        templateUrl: assetPrefix + '/views/info.html',
        controller: 'InfoCtrl as info'
    .state Constants.routes.password,
        url: "/mobile/collections/:boardId/password"
        templateUrl: assetPrefix + '/views/enter-password.html',
        controller: 'PasswordCtrl as password'
    .state Constants.routes.coupon,
        url: "/mobile/coupons/:id"
        templateUrl: assetPrefix + '/views/coupon.html',
        controller: 'CouponCtrl as coupon'
    .state Constants.routes.submission,
        url: "/mobile/collections/:boardId/submission"
        templateUrl: assetPrefix + '/views/entries-new-5-uploading.html',
        controller: 'SubmissionCtrl as submission'
    .state Constants.routes.confirmation,
        url: "/mobile/collections/:boardId/confirmation"
        templateUrl: assetPrefix + '/views/entries-new-6-finished.html',
        controller: 'ConfirmationCtrl as confirmation'
    .state Constants.routes.logout,
        url: "/mobile/logout"
        templateUrl: assetPrefix + '/views/logout.html',
        controller: 'LogoutCtrl as logout'
    .state Constants.routes.error,
        url: "/mobile/error"
        templateUrl: assetPrefix + '/views/error-500.html',
        controller: 'ErrorCtrl as error'
    .state Constants.routes.resetPassword,
        url: "/mobile/reset-password"
        templateUrl: assetPrefix + '/views/reset-password.html',
        controller: 'ResetPasswordCtrl as rpw'
    .state Constants.routes.fullsite,
        url: "/fullsite"
        controller: () ->
            window.location = '?mobile=0'
    .state Constants.routes.dashboard,
        url: "/mobile/dashboard"
        controller: () ->
            window.location = '/members/social?return_to=/manage/dashboard&mobile=0'
    .state Constants.routes.twauth,
        url: "/members/auth/twitter"
        controller: () ->
            window.location = '/members/auth/twitter/mobile'
    .state Constants.routes.viewPhoto,
        url: "/mobile/items/:entryId"
        templateUrl: assetPrefix + '/views/entries-show-photo.html',
        controller: 'ViewPhotoController as view'
    .state Constants.routes.vote_instant,
        url: "/mobile/items/:entryId/:vote_instant"
        templateUrl: assetPrefix + '/views/entries-show-photo.html',
        controller: 'ViewPhotoController as view'
    .state Constants.routes.share,
        url: "/mobile/share/:boardId/:entryId"
        templateUrl: assetPrefix + '/views/share.html',
        controller: 'SharePhotoController as share'
    .state Constants.routes.share_instant,
        url: "/mobile/share/:boardId/:entryId/:instant"
        templateUrl: assetPrefix + '/views/share.html',
        controller: 'SharePhotoController as share'
    .state Constants.routes.siteauth,
        url: "/mobile/site/auth"
        templateUrl: assetPrefix + '/views/siteauth.html',
        controller: 'SiteAuthController as siteauth'

    $translateProvider.translations('en', translations_en)
    .translations('ja', translations_ja)

    #locale gets set in index.html
    $translateProvider.preferredLanguage(locale)

  .run  ($rootScope, $state, $timeout, Dock, Cookies, MixPanel, $rootElement) ->
        console.log "run is running " if DEBUG

        $rootScope.columnClasses = "col-xs-12 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3";
        #check cookie
        if Cookies.hasItem('sr_token')
            console.log "Cookies has token", Cookies.getItem('sr_token')
            Dock.setUserToken(Cookies.getItem('sr_token'))
            Dock.setApiRestriction(Cookies.getItem('sr_api_restriction'))
        else
            MixPanel.registerGuest()

        $rootScope.$on '$stateChangeSuccess', (event, toState, toParams, fromState, fromParams) =>
            MixPanel.trackPageView(toState.url)
            #need to delay removing the preloader in case the view transition was really quick
            $timeout(showPreloader, 500)
            $('#sr-header').css('margin-left', '0')

        $rootScope.$on '$stateChangeStart', (event, toState, toParams, fromState, fromParams) =>
            $rootScope.showPreloader = true

        showPreloader = ->
            $rootScope.showPreloader = false
