from os import getenv

from yandex_music import Client

client = Client(getenv('YANDEX_TOKEN')).init()


def search(_str: str, _type: str = 'all') -> dict:
    album_id = None
    album_title = None
    artist_id = None
    artist_name = None
    result_json = {}

    search_result = client.search(_str, type_=_type)
    type_ = search_result.best.type
    best = search_result.best.result

    # print(search_result)
    if type_ == 'track':
        artists = ''
        if best.artists:
            artists = ', '.join(artist.name for artist in best.artists)
        if best.albums:
            for i in best.albums:
                album_id = i.id
                album_title = i.title

        # Generate json for track
        result_json = {
            "artist": {
                "id": best.id,
                "name": artists
            },
            "track": {
                "id": best.trackId,
                "title": best.title
            },
            "album": {
                "id": album_id,
                "title": album_title
            }
        }
    elif type_ == 'artist':
        result_json = {
            "artist": {
                "id": best.id,
                "name": best.name
            }
        }
    elif type_ == 'album':
        if best.artists:
            for i in best.artists:
                artist_id = i.id
                artist_name = i.name
        _tracks = []
        tracks = {}
        album = client.albums_with_tracks(best.id)
        for i, volume in enumerate(album.volumes):
            _tracks += volume
        _i = 1
        for track in _tracks:
            print(track)
            tracks[f"track_{_i}"] = {
                "id": track.id,
                "tittle": track.title,

            }
            _i += 1

        result_json = {
            "artist": {
                "id": artist_id,
                "name": artist_name
            },
            "album": {
                "id": best.id,
                "title": best.title
            },
            "tracks": tracks
        }
    print(_type)
    return result_json
