"""Tests for the bcom intercom camera"""

from ..const import BCOM_CAMERA_PAYLOAD
from .base_device_tests import TuyaDeviceTestCase

LIGHT_DPS = "101"
FLIP_DPS = "103"
WATERMARK_DPS = "104"
MOTION_DPS = "106"
NIGHT_DPS = "108"
SDSIZE_DPS = "109"
SDSTATUS_DPS = "110"
SDFORMAT_DPS = "111"
SNAPSHOT_DPS = "115"
SDFMTSTATE_DPS = "117"
DOORBELL_DPS = "154"
RECORD_DPS = "150"
RECMODE_DPS = "151"
REBOOT_DPS = "162"
CHANNEL_DPS = "231"
LOCK_DPS = "232"


class TestBcomIntercomCamera(TuyaDeviceTestCase):
    __test__ = True

    def setUp(self):
        self.setUpForConfig("bcom_intercom_camera.yaml", BCOM_CAMERA_PAYLOAD)
        self.subject = self.entities.get("camera")

        self.mark_secondary(
            [
                "light_indicator",
                "switch_flip_image",
                "switch_watermark",
                "select_motion_detection",
                "select_night_vision",
                "sensor_sd_capacity",
                "sensor_sd_status",
                "button_sd_format",
                "sensor_sd_format_state",
                "select_recording_mode",
                "button_restart",
                "sensor_channel",
            ]
        )

    def test_is_recording(self):
        self.dps[RECORD_DPS] = True
        self.assertTrue(self.subject.is_recording)
        self.dps[RECORD_DPS] = False
        self.assertFalse(self.subject.is_recording)

    def test_motion_detection_enabled(self):
        self.assertIsNone(self.subject.motion_detection_enabled)

    def test_is_on(self):
        self.assertIsNone(self.subject.is_on)

    async def test_camera_image(self):
        self.dps[DOORBELL_DPS] = ""
        self.dps[SNAPSHOT_DPS] = "VGVzdA=="
        image = await self.subject.async_camera_image()
        self.assertEqual(image, b"Test")

        self.dps[DOORBELL_DPS] = "a25vY2sga25vY2s="
        image = await self.subject.async_camera_image()
        self.assertEqual(image, b"knock knock")

    async def test_turn_off(self):
        with self.assertRaises(NotImplementedError):
            await self.subject.async_turn_off()

    async def test_turn_on(self):
        with self.assertRaises(NotImplementedError):
            await self.subject.async_turn_on()
