import re
import urllib.request
import json

from streamlink.plugin import Plugin
from streamlink.stream import HLSStream

VIDEO_CONTEXT = "https://chaturbate.com/api/chatvideocontext/{model}/"

_url_re = re.compile(r"https?://(\w+\.)?chaturbate\.com/(?P<username>\w+)")

class Chaturbate(Plugin):
    @classmethod
    def can_handle_url(cls, url):
        return _url_re.match(url)

    def _get_streams(self):
        match = _url_re.match(self.url)
        username = match.group("username")

        res = urllib.request.urlopen(VIDEO_CONTEXT.format(model = username)).read()
        data = json.loads(res)

        self.logger.info("Stream status: {0}".format(data["room_status"]))
        if (data["room_status"] == "public" and isinstance(data["hls_source"], str)):
            hls = data["hls_source"].replace("live-hls", "live-c-fhls").replace("playlist.m3u8", "playlist_sfm4s.m3u8")

            for s in HLSStream.parse_variant_playlist(self.session, hls).items():
                yield s


__plugin__ = Chaturbate