from ytmusicapi.parsers.browsing import *

TRENDS = {"ARROW_DROP_UP": "up", "ARROW_DROP_DOWN": "down", "ARROW_CHART_NEUTRAL": "neutral"}


def parse_chart_song(data):
    parsed = parse_song_flat(data)
    parsed.update(parse_ranking(data))
    return parsed


def parse_chart_artist(data):
    subscribers = get_flex_column_item(data, 1)
    if subscribers:
        subscribers = nav(subscribers, TEXT_RUN_TEXT).split(" ")[0]

    parsed = {
        "title": nav(get_flex_column_item(data, 0), TEXT_RUN_TEXT),
        "browseId": nav(data, NAVIGATION_BROWSE_ID),
        "subscribers": subscribers,
        "thumbnails": nav(data, THUMBNAILS),
    }
    parsed.update(parse_ranking(data))
    return parsed


def parse_chart_trending(data):
    flex_0 = get_flex_column_item(data, 0)
    artists = parse_song_artists(data, 1)
    index = get_dot_separator_index(artists)
    # last item is views for some reason
    views = None if index == len(artists) else artists.pop()["name"].split(" ")[0]
    return {
        "title": nav(flex_0, TEXT_RUN_TEXT),
        "videoId": nav(flex_0, TEXT_RUN + NAVIGATION_VIDEO_ID, True),
        "playlistId": nav(flex_0, TEXT_RUN + NAVIGATION_PLAYLIST_ID, True),
        "artists": artists,
        "thumbnails": nav(data, THUMBNAILS),
        "views": views,
    }


def parse_ranking(data):
    return {
        "rank": nav(data, ["customIndexColumn", "musicCustomIndexColumnRenderer", *TEXT_RUN_TEXT]),
        "trend": TRENDS[nav(data, ["customIndexColumn", "musicCustomIndexColumnRenderer", *ICON_TYPE])],
    }
