import * as jspb from 'google-protobuf'

import * as google_api_annotations_pb from '../google/api/annotations_pb';
import * as google_protobuf_timestamp_pb from 'google-protobuf/google/protobuf/timestamp_pb';
import * as google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb';


export class User extends jspb.Message {
  getId(): string;
  setId(value: string): User;

  getIsAdmin(): boolean;
  setIsAdmin(value: boolean): User;

  getIsActive(): boolean;
  setIsActive(value: boolean): User;

  getEmail(): string;
  setEmail(value: string): User;

  getNote(): string;
  setNote(value: string): User;

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

export namespace User {
  export type AsObject = {
    id: string,
    isAdmin: boolean,
    isActive: boolean,
    email: string,
    note: string,
  }
}

export class UserListItem extends jspb.Message {
  getId(): string;
  setId(value: string): UserListItem;

  getCreatedAt(): google_protobuf_timestamp_pb.Timestamp | undefined;
  setCreatedAt(value?: google_protobuf_timestamp_pb.Timestamp): UserListItem;
  hasCreatedAt(): boolean;
  clearCreatedAt(): UserListItem;

  getUpdatedAt(): google_protobuf_timestamp_pb.Timestamp | undefined;
  setUpdatedAt(value?: google_protobuf_timestamp_pb.Timestamp): UserListItem;
  hasUpdatedAt(): boolean;
  clearUpdatedAt(): UserListItem;

  getEmail(): string;
  setEmail(value: string): UserListItem;

  getIsAdmin(): boolean;
  setIsAdmin(value: boolean): UserListItem;

  getIsActive(): boolean;
  setIsActive(value: boolean): UserListItem;

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

export namespace UserListItem {
  export type AsObject = {
    id: string,
    createdAt?: google_protobuf_timestamp_pb.Timestamp.AsObject,
    updatedAt?: google_protobuf_timestamp_pb.Timestamp.AsObject,
    email: string,
    isAdmin: boolean,
    isActive: boolean,
  }
}

export class UserTenant extends jspb.Message {
  getTenantId(): string;
  setTenantId(value: string): UserTenant;

  getIsAdmin(): boolean;
  setIsAdmin(value: boolean): UserTenant;

  getIsDeviceAdmin(): boolean;
  setIsDeviceAdmin(value: boolean): UserTenant;

  getIsGatewayAdmin(): boolean;
  setIsGatewayAdmin(value: boolean): UserTenant;

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

export namespace UserTenant {
  export type AsObject = {
    tenantId: string,
    isAdmin: boolean,
    isDeviceAdmin: boolean,
    isGatewayAdmin: boolean,
  }
}

export class CreateUserRequest extends jspb.Message {
  getUser(): User | undefined;
  setUser(value?: User): CreateUserRequest;
  hasUser(): boolean;
  clearUser(): CreateUserRequest;

  getPassword(): string;
  setPassword(value: string): CreateUserRequest;

  getTenantsList(): Array<UserTenant>;
  setTenantsList(value: Array<UserTenant>): CreateUserRequest;
  clearTenantsList(): CreateUserRequest;
  addTenants(value?: UserTenant, index?: number): UserTenant;

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

export namespace CreateUserRequest {
  export type AsObject = {
    user?: User.AsObject,
    password: string,
    tenantsList: Array<UserTenant.AsObject>,
  }
}

export class CreateUserResponse extends jspb.Message {
  getId(): string;
  setId(value: string): CreateUserResponse;

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

export namespace CreateUserResponse {
  export type AsObject = {
    id: string,
  }
}

export class GetUserRequest extends jspb.Message {
  getId(): string;
  setId(value: string): GetUserRequest;

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

export namespace GetUserRequest {
  export type AsObject = {
    id: string,
  }
}

export class GetUserResponse extends jspb.Message {
  getUser(): User | undefined;
  setUser(value?: User): GetUserResponse;
  hasUser(): boolean;
  clearUser(): GetUserResponse;

  getCreatedAt(): google_protobuf_timestamp_pb.Timestamp | undefined;
  setCreatedAt(value?: google_protobuf_timestamp_pb.Timestamp): GetUserResponse;
  hasCreatedAt(): boolean;
  clearCreatedAt(): GetUserResponse;

  getUpdatedAt(): google_protobuf_timestamp_pb.Timestamp | undefined;
  setUpdatedAt(value?: google_protobuf_timestamp_pb.Timestamp): GetUserResponse;
  hasUpdatedAt(): boolean;
  clearUpdatedAt(): GetUserResponse;

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

export namespace GetUserResponse {
  export type AsObject = {
    user?: User.AsObject,
    createdAt?: google_protobuf_timestamp_pb.Timestamp.AsObject,
    updatedAt?: google_protobuf_timestamp_pb.Timestamp.AsObject,
  }
}

export class UpdateUserRequest extends jspb.Message {
  getUser(): User | undefined;
  setUser(value?: User): UpdateUserRequest;
  hasUser(): boolean;
  clearUser(): UpdateUserRequest;

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

export namespace UpdateUserRequest {
  export type AsObject = {
    user?: User.AsObject,
  }
}

export class DeleteUserRequest extends jspb.Message {
  getId(): string;
  setId(value: string): DeleteUserRequest;

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

export namespace DeleteUserRequest {
  export type AsObject = {
    id: string,
  }
}

export class ListUsersRequest extends jspb.Message {
  getLimit(): number;
  setLimit(value: number): ListUsersRequest;

  getOffset(): number;
  setOffset(value: number): ListUsersRequest;

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

export namespace ListUsersRequest {
  export type AsObject = {
    limit: number,
    offset: number,
  }
}

export class ListUsersResponse extends jspb.Message {
  getTotalCount(): number;
  setTotalCount(value: number): ListUsersResponse;

  getResultList(): Array<UserListItem>;
  setResultList(value: Array<UserListItem>): ListUsersResponse;
  clearResultList(): ListUsersResponse;
  addResult(value?: UserListItem, index?: number): UserListItem;

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

export namespace ListUsersResponse {
  export type AsObject = {
    totalCount: number,
    resultList: Array<UserListItem.AsObject>,
  }
}

export class UpdateUserPasswordRequest extends jspb.Message {
  getUserId(): string;
  setUserId(value: string): UpdateUserPasswordRequest;

  getPassword(): string;
  setPassword(value: string): UpdateUserPasswordRequest;

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

export namespace UpdateUserPasswordRequest {
  export type AsObject = {
    userId: string,
    password: string,
  }
}

