"""Test the base functions of the media player."""
import base64
from unittest.mock import patch

from homeassistant.components.websocket_api.const import TYPE_RESULT
from homeassistant.setup import async_setup_component

from tests.common import mock_coro


async def test_get_image(hass, hass_ws_client):
    """Test get image via WS command."""
    await async_setup_component(
        hass, "media_player", {"media_player": {"platform": "demo"}}
    )

    client = await hass_ws_client(hass)

    with patch(
        "homeassistant.components.media_player.MediaPlayerDevice."
        "async_get_media_image",
        return_value=mock_coro((b"image", "image/jpeg")),
    ):
        await client.send_json(
            {
                "id": 5,
                "type": "media_player_thumbnail",
                "entity_id": "media_player.bedroom",
            }
        )

        msg = await client.receive_json()

    assert msg["id"] == 5
    assert msg["type"] == TYPE_RESULT
    assert msg["success"]
    assert msg["result"]["content_type"] == "image/jpeg"
    assert msg["result"]["content"] == base64.b64encode(b"image").decode("utf-8")


async def test_get_image_http(hass, hass_client):
    """Test get image via http command."""
    await async_setup_component(
        hass, "media_player", {"media_player": {"platform": "demo"}}
    )

    client = await hass_client()

    with patch(
        "homeassistant.components.media_player.MediaPlayerDevice."
        "async_get_media_image",
        return_value=mock_coro((b"image", "image/jpeg")),
    ):
        resp = await client.get("/api/media_player_proxy/media_player.bedroom")
        content = await resp.read()

    assert content == b"image"


async def test_get_image_http_url(hass, hass_client):
    """Test get image url via http command."""
    await async_setup_component(
        hass, "media_player", {"media_player": {"platform": "demo"}}
    )

    client = await hass_client()

    with patch(
        "homeassistant.components.media_player.MediaPlayerDevice."
        "media_image_remotely_accessible",
        return_value=True,
    ):
        resp = await client.get(
            "/api/media_player_proxy/media_player.bedroom", allow_redirects=False
        )
        assert (
            resp.headers["Location"]
            == "https://img.youtube.com/vi/kxopViU98Xo/hqdefault.jpg"
        )
