from __future__ import unicode_literals

from .common import InfoExtractor
from ..utils import int_or_none


class HypemIE(InfoExtractor):
    _VALID_URL = r"https?://(?:www\.)?hypem\.com/track/(?P<id>[0-9a-z]{5})"
    _TEST = {
        "url": "http://hypem.com/track/1v6ga/BODYWORK+-+TAME",
        "md5": "b9cc91b5af8995e9f0c1cee04c575828",
        "info_dict": {
            "id": "1v6ga",
            "ext": "mp3",
            "title": "Tame",
            "uploader": "BODYWORK",
            "timestamp": 1371810457,
            "upload_date": "20130621",
        },
    }

    def _real_extract(self, url):
        track_id = self._match_id(url)

        response = self._download_webpage(url, track_id)

        track = self._parse_json(
            self._html_search_regex(
                r'(?s)<script\s+type="application/json"\s+id="displayList-data">(.+?)</script>',
                response,
                "tracks",
            ),
            track_id,
        )["tracks"][0]

        track_id = track["id"]
        title = track["song"]

        final_url = self._download_json(
            "http://hypem.com/serve/source/%s/%s" % (track_id, track["key"]),
            track_id,
            "Downloading metadata",
            headers={"Content-Type": "application/json"},
        )["url"]

        return {
            "id": track_id,
            "url": final_url,
            "ext": "mp3",
            "title": title,
            "uploader": track.get("artist"),
            "duration": int_or_none(track.get("time")),
            "timestamp": int_or_none(track.get("ts")),
            "track": title,
        }
