// 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 SyncbaseCore

/// Represents an invitation to join a syncgroup.
public struct SyncgroupInvite {
  public let syncgroupId: Identifier
  public let inviterBlessingNames: [String]

  init(coreInvite: SyncbaseCore.SyncgroupInvite) {
    self.init(
      syncgroupId: Identifier(coreId: coreInvite.syncgroupId),
      inviterBlessingNames: coreInvite.blessingNames)
  }

  public init(syncgroupId: Identifier, inviterBlessingNames: [String]) {
    self.syncgroupId = syncgroupId
    self.inviterBlessingNames = inviterBlessingNames
  }

  public var inviter: User? {
    guard !inviterBlessingNames.isEmpty,
    // TODO(zinman via alexfandrianto): This will normally work because inviter blessing names should
    // be just a single name. However, this will probably not work if it's the cloud's blessing.
    let alias = aliasFromBlessingPattern(inviterBlessingNames[0]) else {
      return nil
    }
    return User(alias: alias)
  }

  public var syncgroupCreator: User? {
    guard let alias = aliasFromBlessingPattern(syncgroupId.blessing) else {
      return nil
    }
    return User(alias: alias)
  }
}