import json

from config import plugins

from .funkwhale_startup import PLUGIN


class MalojaException(Exception):
    pass


@plugins.register_hook(plugins.LISTENING_CREATED, PLUGIN)
def submit_listen(listening, conf, **kwargs):
    server_url = conf["server_url"]
    api_key = conf["api_key"]
    if not server_url or not api_key:
        return

    logger = PLUGIN["logger"]
    logger.info("Submitting listening to Majola at %s", server_url)
    payload = get_payload(listening, api_key)
    logger.debug("Majola payload: %r", payload)
    url = server_url.rstrip("/") + "/apis/mlj_1/newscrobble"
    session = plugins.get_session()
    response = session.post(url, json=payload)
    response.raise_for_status()
    details = json.loads(response.text)
    if details["status"] == "success":
        logger.info("Majola listening submitted successfully")
    else:
        raise MalojaException(response.text)


def get_payload(listening, api_key):
    track = listening.track
    payload = {
        "key": api_key,
        "artists": [track.artist.name],
        "title": track.title,
        "time": int(listening.creation_date.timestamp()),
    }

    if track.album:
        if track.album.title:
            payload["album"] = track.album.title

    return payload
