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"
import * as annotations_pb from './annotations_pb'; // proto import: "annotations.proto"
import * as api_pb from './api_pb'; // proto import: "api.proto"


export class PublicTrip extends jspb.Message {
  getTripId(): number;
  setTripId(value: number): PublicTrip;

  getUser(): api_pb.User | undefined;
  setUser(value?: api_pb.User): PublicTrip;
  hasUser(): boolean;
  clearUser(): PublicTrip;

  getCommunityId(): number;
  setCommunityId(value: number): PublicTrip;

  getFromDate(): string;
  setFromDate(value: string): PublicTrip;

  getToDate(): string;
  setToDate(value: string): PublicTrip;

  getDescription(): string;
  setDescription(value: string): PublicTrip;

  getStatus(): PublicTripStatus;
  setStatus(value: PublicTripStatus): PublicTrip;

  getCreated(): google_protobuf_timestamp_pb.Timestamp | undefined;
  setCreated(value?: google_protobuf_timestamp_pb.Timestamp): PublicTrip;
  hasCreated(): boolean;
  clearCreated(): PublicTrip;

  getCommunitySlug(): string;
  setCommunitySlug(value: string): PublicTrip;

  getSameGenderOnly(): boolean;
  setSameGenderOnly(value: boolean): PublicTrip;

  getOffersCount(): number;
  setOffersCount(value: number): PublicTrip;
  hasOffersCount(): boolean;
  clearOffersCount(): PublicTrip;

  getCommunityName(): string;
  setCommunityName(value: string): PublicTrip;

  getViewerHostRequestId(): number;
  setViewerHostRequestId(value: number): PublicTrip;

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

export namespace PublicTrip {
  export type AsObject = {
    tripId: number,
    user?: api_pb.User.AsObject,
    communityId: number,
    fromDate: string,
    toDate: string,
    description: string,
    status: PublicTripStatus,
    created?: google_protobuf_timestamp_pb.Timestamp.AsObject,
    communitySlug: string,
    sameGenderOnly: boolean,
    offersCount?: number,
    communityName: string,
    viewerHostRequestId: number,
  }

  export enum OffersCountCase { 
    _OFFERS_COUNT_NOT_SET = 0,
    OFFERS_COUNT = 11,
  }
}

export class CreatePublicTripReq extends jspb.Message {
  getCommunityId(): number;
  setCommunityId(value: number): CreatePublicTripReq;

  getFromDate(): string;
  setFromDate(value: string): CreatePublicTripReq;

  getToDate(): string;
  setToDate(value: string): CreatePublicTripReq;

  getDescription(): string;
  setDescription(value: string): CreatePublicTripReq;

  getSameGenderOnly(): boolean;
  setSameGenderOnly(value: boolean): CreatePublicTripReq;

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

export namespace CreatePublicTripReq {
  export type AsObject = {
    communityId: number,
    fromDate: string,
    toDate: string,
    description: string,
    sameGenderOnly: boolean,
  }
}

export class GetPublicTripReq extends jspb.Message {
  getTripId(): number;
  setTripId(value: number): GetPublicTripReq;

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

export namespace GetPublicTripReq {
  export type AsObject = {
    tripId: number,
  }
}

export class ListPublicTripsReq extends jspb.Message {
  getCommunityId(): number;
  setCommunityId(value: number): ListPublicTripsReq;

  getPageSize(): number;
  setPageSize(value: number): ListPublicTripsReq;

  getPageToken(): string;
  setPageToken(value: string): ListPublicTripsReq;

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

export namespace ListPublicTripsReq {
  export type AsObject = {
    communityId: number,
    pageSize: number,
    pageToken: string,
  }
}

export class ListPublicTripsRes extends jspb.Message {
  getPublicTripsList(): Array<PublicTrip>;
  setPublicTripsList(value: Array<PublicTrip>): ListPublicTripsRes;
  clearPublicTripsList(): ListPublicTripsRes;
  addPublicTrips(value?: PublicTrip, index?: number): PublicTrip;

  getNextPageToken(): string;
  setNextPageToken(value: string): ListPublicTripsRes;

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

export namespace ListPublicTripsRes {
  export type AsObject = {
    publicTripsList: Array<PublicTrip.AsObject>,
    nextPageToken: string,
  }
}

export class ListPublicTripsByUserReq extends jspb.Message {
  getUserId(): number;
  setUserId(value: number): ListPublicTripsByUserReq;

  getPageSize(): number;
  setPageSize(value: number): ListPublicTripsByUserReq;

  getPageToken(): string;
  setPageToken(value: string): ListPublicTripsByUserReq;

  getStatusesInList(): Array<PublicTripStatus>;
  setStatusesInList(value: Array<PublicTripStatus>): ListPublicTripsByUserReq;
  clearStatusesInList(): ListPublicTripsByUserReq;
  addStatusesIn(value: PublicTripStatus, index?: number): ListPublicTripsByUserReq;

  getAscending(): boolean;
  setAscending(value: boolean): ListPublicTripsByUserReq;

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

export namespace ListPublicTripsByUserReq {
  export type AsObject = {
    userId: number,
    pageSize: number,
    pageToken: string,
    statusesInList: Array<PublicTripStatus>,
    ascending: boolean,
  }
}

export class ListPublicTripsByUserRes extends jspb.Message {
  getPublicTripsList(): Array<PublicTrip>;
  setPublicTripsList(value: Array<PublicTrip>): ListPublicTripsByUserRes;
  clearPublicTripsList(): ListPublicTripsByUserRes;
  addPublicTrips(value?: PublicTrip, index?: number): PublicTrip;

  getNextPageToken(): string;
  setNextPageToken(value: string): ListPublicTripsByUserRes;

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

export namespace ListPublicTripsByUserRes {
  export type AsObject = {
    publicTripsList: Array<PublicTrip.AsObject>,
    nextPageToken: string,
  }
}

export class UpdatePublicTripReq extends jspb.Message {
  getTripId(): number;
  setTripId(value: number): UpdatePublicTripReq;

  getFromDate(): string;
  setFromDate(value: string): UpdatePublicTripReq;
  hasFromDate(): boolean;
  clearFromDate(): UpdatePublicTripReq;

  getToDate(): string;
  setToDate(value: string): UpdatePublicTripReq;
  hasToDate(): boolean;
  clearToDate(): UpdatePublicTripReq;

  getDescription(): string;
  setDescription(value: string): UpdatePublicTripReq;
  hasDescription(): boolean;
  clearDescription(): UpdatePublicTripReq;

  getStatus(): PublicTripStatus;
  setStatus(value: PublicTripStatus): UpdatePublicTripReq;
  hasStatus(): boolean;
  clearStatus(): UpdatePublicTripReq;

  getSameGenderOnly(): boolean;
  setSameGenderOnly(value: boolean): UpdatePublicTripReq;
  hasSameGenderOnly(): boolean;
  clearSameGenderOnly(): UpdatePublicTripReq;

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

export namespace UpdatePublicTripReq {
  export type AsObject = {
    tripId: number,
    fromDate?: string,
    toDate?: string,
    description?: string,
    status?: PublicTripStatus,
    sameGenderOnly?: boolean,
  }

  export enum FromDateCase { 
    _FROM_DATE_NOT_SET = 0,
    FROM_DATE = 2,
  }

  export enum ToDateCase { 
    _TO_DATE_NOT_SET = 0,
    TO_DATE = 3,
  }

  export enum DescriptionCase { 
    _DESCRIPTION_NOT_SET = 0,
    DESCRIPTION = 4,
  }

  export enum StatusCase { 
    _STATUS_NOT_SET = 0,
    STATUS = 5,
  }

  export enum SameGenderOnlyCase { 
    _SAME_GENDER_ONLY_NOT_SET = 0,
    SAME_GENDER_ONLY = 6,
  }
}

export enum PublicTripStatus { 
  PUBLIC_TRIP_STATUS_UNSPECIFIED = 0,
  PUBLIC_TRIP_STATUS_SEARCHING_FOR_HOST = 1,
  PUBLIC_TRIP_STATUS_CLOSED = 2,
}
