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 music_track_pb from '../music/track_pb'; // proto import: "music/track.proto"
import * as music_artist_pb from '../music/artist_pb'; // proto import: "music/artist.proto"


export class Playlist extends jspb.Message {
  getPlaylistId(): string;
  setPlaylistId(value: string): Playlist;

  getCreatedBy(): string;
  setCreatedBy(value: string): Playlist;

  getTitle(): string;
  setTitle(value: string): Playlist;

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

  getCoverImage(): string;
  setCoverImage(value: string): Playlist;

  getImageUrl(): string;
  setImageUrl(value: string): Playlist;

  getIsOfficial(): boolean;
  setIsOfficial(value: boolean): Playlist;

  getIsPublic(): boolean;
  setIsPublic(value: boolean): Playlist;

  getIsFeatured(): boolean;
  setIsFeatured(value: boolean): Playlist;

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

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

export namespace Playlist {
  export type AsObject = {
    playlistId: string,
    createdBy: string,
    title: string,
    description: string,
    coverImage: string,
    imageUrl: string,
    isOfficial: boolean,
    isPublic: boolean,
    isFeatured: boolean,
    createdAt?: google_protobuf_timestamp_pb.Timestamp.AsObject,
  }
}

export class PlaylistTrack extends jspb.Message {
  getEntryId(): number;
  setEntryId(value: number): PlaylistTrack;

  getPlaylistId(): string;
  setPlaylistId(value: string): PlaylistTrack;

  getTrackId(): number;
  setTrackId(value: number): PlaylistTrack;

  getPosition(): number;
  setPosition(value: number): PlaylistTrack;

  getAddedAt(): google_protobuf_timestamp_pb.Timestamp | undefined;
  setAddedAt(value?: google_protobuf_timestamp_pb.Timestamp): PlaylistTrack;
  hasAddedAt(): boolean;
  clearAddedAt(): PlaylistTrack;

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

export namespace PlaylistTrack {
  export type AsObject = {
    entryId: number,
    playlistId: string,
    trackId: number,
    position: number,
    addedAt?: google_protobuf_timestamp_pb.Timestamp.AsObject,
  }
}

export class PlaylistTrackWithDetails extends jspb.Message {
  getEntryId(): number;
  setEntryId(value: number): PlaylistTrackWithDetails;

  getPlaylistId(): string;
  setPlaylistId(value: string): PlaylistTrackWithDetails;

  getPosition(): number;
  setPosition(value: number): PlaylistTrackWithDetails;

  getAddedAt(): google_protobuf_timestamp_pb.Timestamp | undefined;
  setAddedAt(value?: google_protobuf_timestamp_pb.Timestamp): PlaylistTrackWithDetails;
  hasAddedAt(): boolean;
  clearAddedAt(): PlaylistTrackWithDetails;

  getTrack(): music_track_pb.Track | undefined;
  setTrack(value?: music_track_pb.Track): PlaylistTrackWithDetails;
  hasTrack(): boolean;
  clearTrack(): PlaylistTrackWithDetails;

  getArtist(): music_artist_pb.Artist | undefined;
  setArtist(value?: music_artist_pb.Artist): PlaylistTrackWithDetails;
  hasArtist(): boolean;
  clearArtist(): PlaylistTrackWithDetails;

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

export namespace PlaylistTrackWithDetails {
  export type AsObject = {
    entryId: number,
    playlistId: string,
    position: number,
    addedAt?: google_protobuf_timestamp_pb.Timestamp.AsObject,
    track?: music_track_pb.Track.AsObject,
    artist?: music_artist_pb.Artist.AsObject,
  }
}

