# coding: utf-8
from __future__ import unicode_literals

from .common import InfoExtractor
from ..utils import (
    int_or_none,
    urlencode_postdata,
)


class HungamaIE(InfoExtractor):
    _VALID_URL = r"""(?x)
                    https?://
                        (?:www\.)?hungama\.com/
                        (?:
                            (?:video|movie)/[^/]+/|
                            tv-show/(?:[^/]+/){2}\d+/episode/[^/]+/
                        )
                        (?P<id>\d+)
                    """
    _TESTS = [
        {
            "url": "http://www.hungama.com/video/krishna-chants/39349649/",
            "md5": "a845a6d1ebd08d80c1035126d49bd6a0",
            "info_dict": {
                "id": "2931166",
                "ext": "mp4",
                "title": "Lucky Ali - Kitni Haseen Zindagi",
                "track": "Kitni Haseen Zindagi",
                "artist": "Lucky Ali",
                "album": "Aks",
                "release_year": 2000,
            },
        },
        {
            "url": "https://www.hungama.com/movie/kahaani-2/44129919/",
            "only_matching": True,
        },
        {
            "url": "https://www.hungama.com/tv-show/padded-ki-pushup/season-1/44139461/episode/ep-02-training-sasu-pathlaag-karing/44139503/",
            "only_matching": True,
        },
    ]

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

        webpage = self._download_webpage(url, video_id)

        info = self._search_json_ld(webpage, video_id)

        m3u8_url = self._download_json(
            "https://www.hungama.com/index.php",
            video_id,
            data=urlencode_postdata({"content_id": video_id}),
            headers={
                "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
                "X-Requested-With": "XMLHttpRequest",
            },
            query={
                "c": "common",
                "m": "get_video_mdn_url",
            },
        )["stream_url"]

        formats = self._extract_m3u8_formats(
            m3u8_url, video_id, ext="mp4", entry_protocol="m3u8_native", m3u8_id="hls"
        )
        self._sort_formats(formats)

        info.update(
            {
                "id": video_id,
                "formats": formats,
            }
        )
        return info


class HungamaSongIE(InfoExtractor):
    _VALID_URL = r"https?://(?:www\.)?hungama\.com/song/[^/]+/(?P<id>\d+)"
    _TEST = {
        "url": "https://www.hungama.com/song/kitni-haseen-zindagi/2931166/",
        "md5": "a845a6d1ebd08d80c1035126d49bd6a0",
        "info_dict": {
            "id": "2931166",
            "ext": "mp4",
            "title": "Lucky Ali - Kitni Haseen Zindagi",
            "track": "Kitni Haseen Zindagi",
            "artist": "Lucky Ali",
            "album": "Aks",
            "release_year": 2000,
        },
    }

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

        data = self._download_json(
            "https://www.hungama.com/audio-player-data/track/%s" % audio_id,
            audio_id,
            query={"_country": "IN"},
        )[0]

        track = data["song_name"]
        artist = data.get("singer_name")

        m3u8_url = self._download_json(
            data.get("file") or data["preview_link"], audio_id
        )["response"]["media_url"]

        formats = self._extract_m3u8_formats(
            m3u8_url, audio_id, ext="mp4", entry_protocol="m3u8_native", m3u8_id="hls"
        )
        self._sort_formats(formats)

        title = "%s - %s" % (artist, track) if artist else track
        thumbnail = data.get("img_src") or data.get("album_image")

        return {
            "id": audio_id,
            "title": title,
            "thumbnail": thumbnail,
            "track": track,
            "artist": artist,
            "album": data.get("album_name"),
            "release_year": int_or_none(data.get("date")),
            "formats": formats,
        }
