# coding: utf-8
from __future__ import unicode_literals

from .common import InfoExtractor
from ..utils import (
    determine_ext,
    unified_timestamp,
)


class RuvIE(InfoExtractor):
    _VALID_URL = (
        r"https?://(?:www\.)?ruv\.is/(?:sarpurinn/[^/]+|node)/(?P<id>[^/]+(?:/\d+)?)"
    )
    _TESTS = [
        {
            # m3u8
            "url": "http://ruv.is/sarpurinn/ruv-aukaras/fh-valur/20170516",
            "md5": "66347652f4e13e71936817102acc1724",
            "info_dict": {
                "id": "1144499",
                "display_id": "fh-valur/20170516",
                "ext": "mp4",
                "title": "FH - Valur",
                "description": "Bein útsending frá 3. leik FH og Vals í úrslitum Olísdeildar karla í handbolta.",
                "timestamp": 1494963600,
                "upload_date": "20170516",
            },
        },
        {
            # mp3
            "url": "http://ruv.is/sarpurinn/ras-2/morgunutvarpid/20170619",
            "md5": "395ea250c8a13e5fdb39d4670ef85378",
            "info_dict": {
                "id": "1153630",
                "display_id": "morgunutvarpid/20170619",
                "ext": "mp3",
                "title": "Morgunútvarpið",
                "description": "md5:a4cf1202c0a1645ca096b06525915418",
                "timestamp": 1497855000,
                "upload_date": "20170619",
            },
        },
        {
            "url": "http://ruv.is/sarpurinn/ruv/frettir/20170614",
            "only_matching": True,
        },
        {
            "url": "http://www.ruv.is/node/1151854",
            "only_matching": True,
        },
        {
            "url": "http://ruv.is/sarpurinn/klippa/secret-soltice-hefst-a-morgun",
            "only_matching": True,
        },
        {
            "url": "http://ruv.is/sarpurinn/ras-1/morgunvaktin/20170619",
            "only_matching": True,
        },
    ]

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

        webpage = self._download_webpage(url, display_id)

        title = self._og_search_title(webpage)

        FIELD_RE = r'video\.%s\s*=\s*(["\'])(?P<url>(?:(?!\1).)+)\1'

        media_url = self._html_search_regex(
            FIELD_RE % "src", webpage, "video URL", group="url"
        )

        video_id = self._search_regex(
            r'<link\b[^>]+\bhref=["\']https?://www\.ruv\.is/node/(\d+)',
            webpage,
            "video id",
            default=display_id,
        )

        ext = determine_ext(media_url)

        if ext == "m3u8":
            formats = self._extract_m3u8_formats(
                media_url, video_id, "mp4", entry_protocol="m3u8_native", m3u8_id="hls"
            )
        elif ext == "mp3":
            formats = [
                {
                    "format_id": "mp3",
                    "url": media_url,
                    "vcodec": "none",
                }
            ]
        else:
            formats = [
                {
                    "url": media_url,
                }
            ]

        description = self._og_search_description(webpage, default=None)
        thumbnail = self._og_search_thumbnail(
            webpage, default=None
        ) or self._search_regex(FIELD_RE % "poster", webpage, "thumbnail", fatal=False)
        timestamp = unified_timestamp(
            self._html_search_meta(
                "article:published_time", webpage, "timestamp", fatal=False
            )
        )

        return {
            "id": video_id,
            "display_id": display_id,
            "title": title,
            "description": description,
            "thumbnail": thumbnail,
            "timestamp": timestamp,
            "formats": formats,
        }
