# coding: utf-8
from __future__ import unicode_literals

import re

from .common import InfoExtractor
from ..utils import unsmuggle_url


class JWPlatformIE(InfoExtractor):
    _VALID_URL = r"(?:https?://(?:content\.jwplatform|cdn\.jwplayer)\.com/(?:(?:feed|player|thumb|preview)s|jw6|v2/media)/|jwplatform:)(?P<id>[a-zA-Z0-9]{8})"
    _TESTS = [
        {
            "url": "http://content.jwplatform.com/players/nPripu9l-ALJ3XQCI.js",
            "md5": "fa8899fa601eb7c83a64e9d568bdf325",
            "info_dict": {
                "id": "nPripu9l",
                "ext": "mov",
                "title": "Big Buck Bunny Trailer",
                "description": "Big Buck Bunny is a short animated film by the Blender Institute. It is made using free and open source software.",
                "upload_date": "20081127",
                "timestamp": 1227796140,
            },
        },
        {
            "url": "https://cdn.jwplayer.com/players/nPripu9l-ALJ3XQCI.js",
            "only_matching": True,
        },
    ]

    @staticmethod
    def _extract_url(webpage):
        urls = JWPlatformIE._extract_urls(webpage)
        return urls[0] if urls else None

    @staticmethod
    def _extract_urls(webpage):
        return re.findall(
            r'<(?:script|iframe)[^>]+?src=["\']((?:https?:)?//(?:content\.jwplatform|cdn\.jwplayer)\.com/players/[a-zA-Z0-9]{8})',
            webpage,
        )

    def _real_extract(self, url):
        url, smuggled_data = unsmuggle_url(url, {})
        self._initialize_geo_bypass(
            {
                "countries": smuggled_data.get("geo_countries"),
            }
        )
        video_id = self._match_id(url)
        json_data = self._download_json(
            "https://cdn.jwplayer.com/v2/media/" + video_id, video_id
        )
        return self._parse_jwplayer_data(json_data, video_id)
