package tech.summerly.quiet.data.model

import io.reactivex.Flowable
import tech.summerly.quiet.data.local.entity.Album
import tech.summerly.quiet.data.local.entity.Artist
import tech.summerly.quiet.data.local.entity.Music
import tech.summerly.quiet.data.local.entity.Tag

/**
 * author : SUMMERLY
 * e-mail : yangbinyhbn@gmail.com
 * time   : 2017/8/6
 * desc   : 音乐源
 */
interface MusicSource {


    /**
     * 获取数据中所有音乐
     */
    fun AllMusics(): Flowable<List<Music>>

    /**
     * 获取所有的标签
     */
    fun allTag(): Flowable<List<Tag>>

    /**
     * 创建一个新标签
     */
    fun createTag(tag: String)

    /**
     * 添加歌曲列表到指定标签下
     */
    fun addToTag(vararg musics: Music, tag: Tag)

    /**
     * 获取所属标签下的音乐列表
     */
    fun musics(tag: Tag): Flowable<List<Music>>

    /**
     * 获取指定艺人的所有歌曲
     */
    fun musics(artist: Artist): Flowable<List<Music>>

    /**
     * 获取音乐列表中所有的歌手
     */
    fun allArtist(): Flowable<List<Artist>>

    /**
     * 获取指定专辑下的所有歌曲
     */
    fun musics(album: Album): Flowable<List<Music>>

    /**
     * 获取音乐中所有的专辑
     */
    fun allAlbum(): Flowable<List<Album>>

}