angular.module("shuttlerockApp.resources", [])
.factory "Site", ($resource) ->
    url = "#{apiPrefix}/v2/site.json"

    $resource url, {}, {
        get: {method: "GET"}
        auth: { method: "POST", url: "#{apiPrefix}/v2/site/auth.json", headers: {'Content-Type': 'application/x-www-form-url-encoded'}}
    }
.factory "Token", ($resource) ->
    url = "#{apiPrefix}/v2/token.json"

    $resource url, {}, {
        get: {method: "POST"}
    }
.factory "FbToken", ($resource) ->
    url = "#{apiPrefix}/v2/facebook-token.json"

    $resource url, {}, {
        get: {method: "POST"}
    }

.factory "User", ($resource, Dock) ->
    url = "#{apiPrefix}/v2/me.json"
    $resource url, {}, {
        query: method: "GET", isArray: false, headers: {'Authorization': Dock.data.userToken}
        update: method: "PUT", isArray: false, headers: {'Authorization': Dock.data.userToken}
    }

.factory "Boards", ($resource) ->
    url = "#{apiPrefix}/v2/boards.json"

    $resource url, {}, {
        query: {method: "GET", isArray:true}
    }

.factory "ContestBoards", ($resource) ->
    url = "#{apiPrefix}/v2/contest-boards.json"

    $resource url, {}, {
      query: {method: "GET", isArray:true}
    }
.factory "NonContestBoards", ($resource) ->
    url = "#{apiPrefix}/v2/non-contest-boards.json"

    $resource url, {}, {
      query: {method: "GET", isArray:true}
    }

.factory "Board", ($resource) ->
    url = "#{apiPrefix}/v2/boards/:id.json"

    $resource url, {}, {
        query: method: "GET", isArray:false, params: {id: '@boardId'}
    }
.factory "Entry", ($resource, Dock) ->
    url = "#{apiPrefix}/v2/entries/:id.json"

    $resource url, {}, {
      query: method: "GET", isArray:false, params: {id: '@id', boardId: '@boardId'}, headers: {'Authorization': Dock.getUserToken() }
      share: method: "POST", isArray: false, params: {id: '@id' }, headers: {'Authorization': Dock.getUserToken }, url: "#{apiPrefix}/v2/entries/:id/share.json"
      vote: method: "POST", isArray: false, params: {id: '@id' }, headers: {'Authorization': Dock.getUserToken }, url: "#{apiPrefix}/v2/entries/:id/vote.json"      
    }

.factory "Entries", ($resource, Dock) ->
    url = "#{apiPrefix}/v2/boards/:boardId/entries.json"
    $resource url, {}, {
        query: method: "GET", isArray: true, params: {boardId: '@boardId', page: '@page'}
        save: method: "POST", isArray: false, headers: {'Authorization': Dock.getUserToken }
    }
.factory "Comments", ($resource, Dock) ->
    url = "#{apiPrefix}/v2/entries/:entryId/comments.json"
    $resource url, {}, {
      query: method: "GET", isArray: true, params: {entryId: '@entryId', page: '@page'}
      save: method: "POST", isArray: false, headers: {'Authorization': Dock.getUserToken }
    }

.factory "Password", ($resource) ->
        url = "#{apiPrefix}/v2/users/reset-password.json"

        $resource url, {}, {
            save: method: "POST", isArray: false
        }
.factory "Coupons", ($resource) ->
        url = "#{apiPrefix}/v2/coupons/:id.json"

        $resource url, {}, {
            get: method: "GET", isArray: false, params: {id: '@couponId'}
            delete: method: "DELETE", isArray: false, params: {id: '@couponId'}
        }
.factory "CouponToken", ($resource) ->
        url = "#{apiPrefix}/v2/coupon-token.json"

        $resource url, {}, {
            post: method: "POST", isArray: false
        }
.factory "CouponTest", ($resource) ->
        url = "assets/coupon.json"

        $resource url, {}, {
            get: method: "GET", isArray: false
        }

.factory 'sitePasswordInterceptor', ($rootScope) ->
  return {
    request: (config) ->
      config.headers ||= {}
      config.headers['Site-Password-Token'] = $rootScope.sitePasswordToken if $rootScope.sitePasswordToken
      config
  }