import * as jspb from 'google-protobuf'

import * as google_protobuf_timestamp_pb from 'google-protobuf/google/protobuf/timestamp_pb'; // proto import: "google/protobuf/timestamp.proto"


export class MessageContentText extends jspb.Message {
  getText(): string;
  setText(value: string): MessageContentText;

  serializeBinary(): Uint8Array;
  toObject(includeInstance?: boolean): MessageContentText.AsObject;
  static toObject(includeInstance: boolean, msg: MessageContentText): MessageContentText.AsObject;
  static serializeBinaryToWriter(message: MessageContentText, writer: jspb.BinaryWriter): void;
  static deserializeBinary(bytes: Uint8Array): MessageContentText;
  static deserializeBinaryFromReader(message: MessageContentText, reader: jspb.BinaryReader): MessageContentText;
}

export namespace MessageContentText {
  export type AsObject = {
    text: string,
  }
}

export class MessageContentChatCreated extends jspb.Message {
  serializeBinary(): Uint8Array;
  toObject(includeInstance?: boolean): MessageContentChatCreated.AsObject;
  static toObject(includeInstance: boolean, msg: MessageContentChatCreated): MessageContentChatCreated.AsObject;
  static serializeBinaryToWriter(message: MessageContentChatCreated, writer: jspb.BinaryWriter): void;
  static deserializeBinary(bytes: Uint8Array): MessageContentChatCreated;
  static deserializeBinaryFromReader(message: MessageContentChatCreated, reader: jspb.BinaryReader): MessageContentChatCreated;
}

export namespace MessageContentChatCreated {
  export type AsObject = {
  }
}

export class MessageContentChatEdited extends jspb.Message {
  serializeBinary(): Uint8Array;
  toObject(includeInstance?: boolean): MessageContentChatEdited.AsObject;
  static toObject(includeInstance: boolean, msg: MessageContentChatEdited): MessageContentChatEdited.AsObject;
  static serializeBinaryToWriter(message: MessageContentChatEdited, writer: jspb.BinaryWriter): void;
  static deserializeBinary(bytes: Uint8Array): MessageContentChatEdited;
  static deserializeBinaryFromReader(message: MessageContentChatEdited, reader: jspb.BinaryReader): MessageContentChatEdited;
}

export namespace MessageContentChatEdited {
  export type AsObject = {
  }
}

export class MessageContentUserInvited extends jspb.Message {
  getTargetUserId(): number;
  setTargetUserId(value: number): MessageContentUserInvited;

  serializeBinary(): Uint8Array;
  toObject(includeInstance?: boolean): MessageContentUserInvited.AsObject;
  static toObject(includeInstance: boolean, msg: MessageContentUserInvited): MessageContentUserInvited.AsObject;
  static serializeBinaryToWriter(message: MessageContentUserInvited, writer: jspb.BinaryWriter): void;
  static deserializeBinary(bytes: Uint8Array): MessageContentUserInvited;
  static deserializeBinaryFromReader(message: MessageContentUserInvited, reader: jspb.BinaryReader): MessageContentUserInvited;
}

export namespace MessageContentUserInvited {
  export type AsObject = {
    targetUserId: number,
  }
}

export class MessageContentUserLeft extends jspb.Message {
  serializeBinary(): Uint8Array;
  toObject(includeInstance?: boolean): MessageContentUserLeft.AsObject;
  static toObject(includeInstance: boolean, msg: MessageContentUserLeft): MessageContentUserLeft.AsObject;
  static serializeBinaryToWriter(message: MessageContentUserLeft, writer: jspb.BinaryWriter): void;
  static deserializeBinary(bytes: Uint8Array): MessageContentUserLeft;
  static deserializeBinaryFromReader(message: MessageContentUserLeft, reader: jspb.BinaryReader): MessageContentUserLeft;
}

export namespace MessageContentUserLeft {
  export type AsObject = {
  }
}

export class MessageContentUserMadeAdmin extends jspb.Message {
  getTargetUserId(): number;
  setTargetUserId(value: number): MessageContentUserMadeAdmin;

  serializeBinary(): Uint8Array;
  toObject(includeInstance?: boolean): MessageContentUserMadeAdmin.AsObject;
  static toObject(includeInstance: boolean, msg: MessageContentUserMadeAdmin): MessageContentUserMadeAdmin.AsObject;
  static serializeBinaryToWriter(message: MessageContentUserMadeAdmin, writer: jspb.BinaryWriter): void;
  static deserializeBinary(bytes: Uint8Array): MessageContentUserMadeAdmin;
  static deserializeBinaryFromReader(message: MessageContentUserMadeAdmin, reader: jspb.BinaryReader): MessageContentUserMadeAdmin;
}

export namespace MessageContentUserMadeAdmin {
  export type AsObject = {
    targetUserId: number,
  }
}

export class MessageContentUserRemovedAdmin extends jspb.Message {
  getTargetUserId(): number;
  setTargetUserId(value: number): MessageContentUserRemovedAdmin;

  serializeBinary(): Uint8Array;
  toObject(includeInstance?: boolean): MessageContentUserRemovedAdmin.AsObject;
  static toObject(includeInstance: boolean, msg: MessageContentUserRemovedAdmin): MessageContentUserRemovedAdmin.AsObject;
  static serializeBinaryToWriter(message: MessageContentUserRemovedAdmin, writer: jspb.BinaryWriter): void;
  static deserializeBinary(bytes: Uint8Array): MessageContentUserRemovedAdmin;
  static deserializeBinaryFromReader(message: MessageContentUserRemovedAdmin, reader: jspb.BinaryReader): MessageContentUserRemovedAdmin;
}

export namespace MessageContentUserRemovedAdmin {
  export type AsObject = {
    targetUserId: number,
  }
}

export class MessageContentUserRemoved extends jspb.Message {
  getTargetUserId(): number;
  setTargetUserId(value: number): MessageContentUserRemoved;

  serializeBinary(): Uint8Array;
  toObject(includeInstance?: boolean): MessageContentUserRemoved.AsObject;
  static toObject(includeInstance: boolean, msg: MessageContentUserRemoved): MessageContentUserRemoved.AsObject;
  static serializeBinaryToWriter(message: MessageContentUserRemoved, writer: jspb.BinaryWriter): void;
  static deserializeBinary(bytes: Uint8Array): MessageContentUserRemoved;
  static deserializeBinaryFromReader(message: MessageContentUserRemoved, reader: jspb.BinaryReader): MessageContentUserRemoved;
}

export namespace MessageContentUserRemoved {
  export type AsObject = {
    targetUserId: number,
  }
}

export class MessageContentHostRequestStatusChanged extends jspb.Message {
  getStatus(): HostRequestStatus;
  setStatus(value: HostRequestStatus): MessageContentHostRequestStatusChanged;

  serializeBinary(): Uint8Array;
  toObject(includeInstance?: boolean): MessageContentHostRequestStatusChanged.AsObject;
  static toObject(includeInstance: boolean, msg: MessageContentHostRequestStatusChanged): MessageContentHostRequestStatusChanged.AsObject;
  static serializeBinaryToWriter(message: MessageContentHostRequestStatusChanged, writer: jspb.BinaryWriter): void;
  static deserializeBinary(bytes: Uint8Array): MessageContentHostRequestStatusChanged;
  static deserializeBinaryFromReader(message: MessageContentHostRequestStatusChanged, reader: jspb.BinaryReader): MessageContentHostRequestStatusChanged;
}

export namespace MessageContentHostRequestStatusChanged {
  export type AsObject = {
    status: HostRequestStatus,
  }
}

export class Message extends jspb.Message {
  getMessageId(): number;
  setMessageId(value: number): Message;

  getAuthorUserId(): number;
  setAuthorUserId(value: number): Message;

  getTime(): google_protobuf_timestamp_pb.Timestamp | undefined;
  setTime(value?: google_protobuf_timestamp_pb.Timestamp): Message;
  hasTime(): boolean;
  clearTime(): Message;

  getText(): MessageContentText | undefined;
  setText(value?: MessageContentText): Message;
  hasText(): boolean;
  clearText(): Message;

  getChatCreated(): MessageContentChatCreated | undefined;
  setChatCreated(value?: MessageContentChatCreated): Message;
  hasChatCreated(): boolean;
  clearChatCreated(): Message;

  getChatEdited(): MessageContentChatEdited | undefined;
  setChatEdited(value?: MessageContentChatEdited): Message;
  hasChatEdited(): boolean;
  clearChatEdited(): Message;

  getUserInvited(): MessageContentUserInvited | undefined;
  setUserInvited(value?: MessageContentUserInvited): Message;
  hasUserInvited(): boolean;
  clearUserInvited(): Message;

  getUserLeft(): MessageContentUserLeft | undefined;
  setUserLeft(value?: MessageContentUserLeft): Message;
  hasUserLeft(): boolean;
  clearUserLeft(): Message;

  getUserMadeAdmin(): MessageContentUserMadeAdmin | undefined;
  setUserMadeAdmin(value?: MessageContentUserMadeAdmin): Message;
  hasUserMadeAdmin(): boolean;
  clearUserMadeAdmin(): Message;

  getUserRemovedAdmin(): MessageContentUserRemovedAdmin | undefined;
  setUserRemovedAdmin(value?: MessageContentUserRemovedAdmin): Message;
  hasUserRemovedAdmin(): boolean;
  clearUserRemovedAdmin(): Message;

  getHostRequestStatusChanged(): MessageContentHostRequestStatusChanged | undefined;
  setHostRequestStatusChanged(value?: MessageContentHostRequestStatusChanged): Message;
  hasHostRequestStatusChanged(): boolean;
  clearHostRequestStatusChanged(): Message;

  getGroupChatUserRemoved(): MessageContentUserRemoved | undefined;
  setGroupChatUserRemoved(value?: MessageContentUserRemoved): Message;
  hasGroupChatUserRemoved(): boolean;
  clearGroupChatUserRemoved(): Message;

  getContentCase(): Message.ContentCase;

  serializeBinary(): Uint8Array;
  toObject(includeInstance?: boolean): Message.AsObject;
  static toObject(includeInstance: boolean, msg: Message): Message.AsObject;
  static serializeBinaryToWriter(message: Message, writer: jspb.BinaryWriter): void;
  static deserializeBinary(bytes: Uint8Array): Message;
  static deserializeBinaryFromReader(message: Message, reader: jspb.BinaryReader): Message;
}

export namespace Message {
  export type AsObject = {
    messageId: number,
    authorUserId: number,
    time?: google_protobuf_timestamp_pb.Timestamp.AsObject,
    text?: MessageContentText.AsObject,
    chatCreated?: MessageContentChatCreated.AsObject,
    chatEdited?: MessageContentChatEdited.AsObject,
    userInvited?: MessageContentUserInvited.AsObject,
    userLeft?: MessageContentUserLeft.AsObject,
    userMadeAdmin?: MessageContentUserMadeAdmin.AsObject,
    userRemovedAdmin?: MessageContentUserRemovedAdmin.AsObject,
    hostRequestStatusChanged?: MessageContentHostRequestStatusChanged.AsObject,
    groupChatUserRemoved?: MessageContentUserRemoved.AsObject,
  }

  export enum ContentCase { 
    CONTENT_NOT_SET = 0,
    TEXT = 4,
    CHAT_CREATED = 5,
    CHAT_EDITED = 6,
    USER_INVITED = 7,
    USER_LEFT = 8,
    USER_MADE_ADMIN = 9,
    USER_REMOVED_ADMIN = 10,
    HOST_REQUEST_STATUS_CHANGED = 11,
    GROUP_CHAT_USER_REMOVED = 12,
  }
}

export enum HostRequestStatus { 
  HOST_REQUEST_STATUS_PENDING = 0,
  HOST_REQUEST_STATUS_ACCEPTED = 1,
  HOST_REQUEST_STATUS_REJECTED = 2,
  HOST_REQUEST_STATUS_CONFIRMED = 3,
  HOST_REQUEST_STATUS_CANCELLED = 4,
}
