"""Test the Enigma2 config flow."""

from openwebif.api import OpenWebIfServiceEvent, OpenWebIfStatus

from homeassistant.components.enigma2.const import (
    CONF_DEEP_STANDBY,
    CONF_MAC_ADDRESS,
    CONF_SOURCE_BOUQUET,
    CONF_USE_CHANNEL_ICON,
    DEFAULT_DEEP_STANDBY,
    DEFAULT_PORT,
    DEFAULT_SSL,
    DEFAULT_VERIFY_SSL,
)
from homeassistant.const import (
    CONF_HOST,
    CONF_NAME,
    CONF_PASSWORD,
    CONF_PORT,
    CONF_SSL,
    CONF_USERNAME,
    CONF_VERIFY_SSL,
)

MAC_ADDRESS = "12:34:56:78:90:ab"

TEST_REQUIRED = {
    CONF_HOST: "1.1.1.1",
    CONF_PORT: DEFAULT_PORT,
    CONF_SSL: DEFAULT_SSL,
    CONF_VERIFY_SSL: DEFAULT_VERIFY_SSL,
}

TEST_FULL = {
    CONF_HOST: "1.1.1.1",
    CONF_PORT: DEFAULT_PORT,
    CONF_SSL: DEFAULT_SSL,
    CONF_USERNAME: "root",
    CONF_PASSWORD: "password",
    CONF_VERIFY_SSL: DEFAULT_VERIFY_SSL,
}

TEST_IMPORT_FULL = {
    CONF_HOST: "1.1.1.1",
    CONF_PORT: DEFAULT_PORT,
    CONF_SSL: DEFAULT_SSL,
    CONF_USERNAME: "root",
    CONF_PASSWORD: "password",
    CONF_NAME: "My Player",
    CONF_DEEP_STANDBY: DEFAULT_DEEP_STANDBY,
    CONF_SOURCE_BOUQUET: "Favourites",
    CONF_MAC_ADDRESS: MAC_ADDRESS,
    CONF_USE_CHANNEL_ICON: False,
}

TEST_IMPORT_REQUIRED = {CONF_HOST: "1.1.1.1"}

EXPECTED_OPTIONS = {
    CONF_DEEP_STANDBY: DEFAULT_DEEP_STANDBY,
    CONF_SOURCE_BOUQUET: "Favourites",
    CONF_USE_CHANNEL_ICON: False,
}


class MockDevice:
    """A mock Enigma2 device."""

    mac_address: str | None = "12:34:56:78:90:ab"
    _base = "http://1.1.1.1"

    def __init__(self) -> None:
        """Initialize the mock Enigma2 device."""
        self.status = OpenWebIfStatus(currservice=OpenWebIfServiceEvent())

    async def _call_api(self, url: str) -> dict | None:
        if url.endswith("/api/about"):
            return {
                "info": {
                    "ifaces": [
                        {
                            "mac": self.mac_address,
                        }
                    ],
                    "model": "Mock Enigma2",
                    "brand": "Enigma2",
                }
            }
        return None

    def get_version(self) -> str | None:
        """Return the version."""
        return None

    async def get_about(self) -> dict:
        """Get mock about endpoint."""
        return await self._call_api("/api/about")

    async def get_all_bouquets(self) -> dict:
        """Get all bouquets."""
        return {
            "bouquets": [
                [
                    '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "userbouquet.favourites.tv" ORDER BY bouquet',
                    "Favourites (TV)",
                ]
            ]
        }

    async def update(self) -> None:
        """Mock update."""

    async def close(self):
        """Mock close."""