// Copyright 2016 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

import Foundation
import Syncbase

final class TodoList: Jsonable {
  // This is set in Syncbase.swift when the TodoList is originally deserialized.
  var collection: Collection? = nil
  var name: String = ""
  var updatedAt: NSDate = NSDate()
  var members: [Contact] = []
  var tasks: [Task] = []

  init(name: String, updatedAt: NSDate = NSDate()) {
    self.name = name
    self.updatedAt = updatedAt
  }

  func isComplete() -> Bool {
    return !tasks.isEmpty && tasks.filter { task in
      return !task.done
    }.count == 0
  }

  func numberTasksComplete() -> Int {
    return tasks.filter { task in
      return task.done
    }.count
  }

  func toJsonable() -> [String: AnyObject] {
    return [
      "name": name,
      "updatedAt": updatedAt.timeIntervalSince1970]
  }

  static func fromJsonable(data: [String: AnyObject]) -> TodoList? {
    guard let name = data["name"] as? String,
      updatedAt = data["updatedAt"] as? NSTimeInterval else {
        return nil
    }
    return TodoList(name: name, updatedAt: NSDate(timeIntervalSince1970: updatedAt))
  }
}