"""Tests for smartcam motion detection module."""

from __future__ import annotations

from kasa import Device
from kasa.smartcam.smartcammodule import SmartCamModule

from ...device_fixtures import parametrize

motiondetection = parametrize(
    "has motion detection", component_filter="detection", protocol_filter={"SMARTCAM"}
)


@motiondetection
async def test_motiondetection(dev: Device):
    """Test device motion detection."""
    motion = dev.modules.get(SmartCamModule.SmartCamMotionDetection)
    assert motion

    mde_feat = dev.features.get("motion_detection")
    assert mde_feat

    original_enabled = motion.enabled

    try:
        await motion.set_enabled(not original_enabled)
        await dev.update()
        assert motion.enabled is not original_enabled
        assert mde_feat.value is not original_enabled

        await motion.set_enabled(original_enabled)
        await dev.update()
        assert motion.enabled is original_enabled
        assert mde_feat.value is original_enabled

        await mde_feat.set_value(not original_enabled)
        await dev.update()
        assert motion.enabled is not original_enabled
        assert mde_feat.value is not original_enabled

    finally:
        await motion.set_enabled(original_enabled)