var angular = require('angular');
require('../modules');
require('jsUtil');
require('./TaskLocalforageService');
'use strict';

var module = angular.module('task.services');

/**
 * 任务仓库。
 */
module.factory('TaskRepository', function(TaskLocalforageService, $q) {

  var service = {
    /**
     * 通过id获取任务。
     * @param  {String} id 任务id
     * @return {Task}    任务对象
     */
    getTaskById: function(taskId) {
      return TaskLocalforageService.getById(taskId);
    },

    getDiscussionById: function(discussionId) {
      return TaskLocalforageService.getDiscussionById(discussionId);
    },
    /**
     * 新增或者更新任务。
     * <p>
     * 若为单个任务，则新增或者更新任务；若为任务列表，则添加任务列表。
     * </p>
     * <p>
     * 第一次调用此方法，应该是在成功添加一条任务时，初始化添加任务缓存。
     * </p>
     * @param {Array<Task>|task} tasks 任务实体或任务列表
     */
    addOrUpdateTasks: function(tasks) {
      var promises;
      if (jsUtil.isArray(tasks)) {
        promises = jsUtil.map(tasks, function(task) {
          return TaskLocalforageService.setTask(task);
        });
        return $q.all(promises);
      } else {
        return TaskLocalforageService.setTask(tasks);
      }
    },

    /**
     * 添加任务讨论
     * @param {Array<Discussion>|Discussion} discussions 任务讨论
     */
    addDiscussion: function(discussions) {
      var promises;
      if (jsUtil.isArray(discussions)) {
        promises = jsUtil.map(discussions, function(discussion) {
          return TaskLocalforageService.addDiscussion(discussion);
        });
        return $q.all(promises);
      } else {
        return TaskLocalforageService.addDiscussion(discussions);
      }
    },
    /**
     * 获取某个任务的任务讨论。
     * @param  {String} taskId 任务id
     * @return Promise
     */
    getDiscussions: function(taskId) {
      return TaskLocalforageService.getDiscussions(taskId);
    },

    changeDiscussions: function(discussions) {
      return TaskLocalforageService.changeDiscussions(discussions);
    },

    changeDiscussion: function(discussion, cacheId) {
      return TaskLocalforageService.changeDiscussion(discussion, cacheId);
    },
    /**
     * 移除缓存中已缓存的某一任务。
     * @param {String} itemName 需要移除值的属性
     * @return Promise
     */
    removeItem: function(taskId) {
      return TaskLocalforageService.removeItem(taskId);
    },

    removeDiscussionFromCache: function(discussionId) {
      return TaskLocalforageService.removeDiscussionFromCache(discussionId);
    },

    setDiscussion: function(discussion) {
      return TaskLocalforageService.setDiscussion(discussion);
    }

  };


  return service;
});