import Foundation

public struct Report: Encodable {
  public init(
    sender: ReportUser,
    recipient: ReportUser,
    type: ReportType,
    screenshot: Data,
    partyName: String? = nil,
    partyBlob: String? = nil,
    partyMembers: [ReportUser]? = nil
  ) {
    self.sender = sender
    self.recipient = recipient
    self.type = type
    self.screenshot = screenshot
    self.partyName = partyName
    self.partyBlob = partyBlob
    self.partyMembers = partyMembers
  }
  
  public var sender: ReportUser
  public var recipient: ReportUser
  public var type: ReportType
  public var screenshot: Data
  public var partyName: String?
  public var partyBlob: String?
  public var partyMembers: [ReportUser]?
}

extension Report {
  public struct ReportUser: Encodable {
    public init(
      userId: String,
      username: String
    ) {
      self.userId = userId
      self.username = username
    }
    
    public var userId: String
    public var username: String
  }
}

extension Report {
  public enum ReportType: String, Encodable {
    case dm
    case group
    case channel
  }
}