"""Mock of Network Manager IP4Config service."""

from dbus_fast import Variant
from dbus_fast.service import PropertyAccess, dbus_property

from .base import DBusServiceMock

BUS_NAME = "org.freedesktop.NetworkManager"


def setup(object_path: str | None = None) -> DBusServiceMock:
    """Create dbus mock object."""
    return IP4Config()


# pylint: disable=invalid-name


class IP4Config(DBusServiceMock):
    """IP4Config mock.

    gdbus introspect --system --dest org.freedesktop.NetworkManager --object-path /org/freedesktop/NetworkManager/IP4Config/1
    """

    interface = "org.freedesktop.NetworkManager.IP4Config"
    object_path = "/org/freedesktop/NetworkManager/IP4Config/1"

    @dbus_property(access=PropertyAccess.READ)
    def Addresses(self) -> "aau":
        """Get Addresses."""
        return [[2499979456, 24, 16951488]]

    @dbus_property(access=PropertyAccess.READ)
    def AddressData(self) -> "aa{sv}":
        """Get AddressData."""
        return [{"address": Variant("s", "192.168.2.148"), "prefix": Variant("u", 24)}]

    @dbus_property(access=PropertyAccess.READ)
    def Gateway(self) -> "s":
        """Get Gateway."""
        return "192.168.2.1"

    @dbus_property(access=PropertyAccess.READ)
    def Routes(self) -> "aau":
        """Get Routes."""
        return [[174272, 24, 0, 100], [65193, 16, 0, 1000]]

    @dbus_property(access=PropertyAccess.READ)
    def RouteData(self) -> "aa{sv}":
        """Get RouteData."""
        return [
            {
                "dest": Variant("s", "192.168.2.0"),
                "prefix": Variant("u", 24),
                "metric": Variant("u", 100),
            },
            {
                "dest": Variant("s", "169.254.0.0"),
                "prefix": Variant("u", 16),
                "metric": Variant("u", 1000),
            },
            {
                "dest": Variant("s", "0.0.0.0"),
                "prefix": Variant("u", 0),
                "next-hop": Variant("s", "192.168.2.1"),
                "metric": Variant("u", 100),
            },
        ]

    @dbus_property(access=PropertyAccess.READ)
    def NameserverData(self) -> "aa{sv}":
        """Get NameserverData."""
        return [{"address": Variant("s", "192.168.2.2")}]

    @dbus_property(access=PropertyAccess.READ)
    def Nameservers(self) -> "au":
        """Get Nameservers."""
        return [16951488]

    @dbus_property(access=PropertyAccess.READ)
    def Domains(self) -> "as":
        """Get Domains."""
        return []

    @dbus_property(access=PropertyAccess.READ)
    def Searches(self) -> "as":
        """Get Searches."""
        return []

    @dbus_property(access=PropertyAccess.READ)
    def DnsOptions(self) -> "as":
        """Get DnsOptions."""
        return []

    @dbus_property(access=PropertyAccess.READ)
    def DnsPriority(self) -> "i":
        """Get DnsPriority."""
        return 100

    @dbus_property(access=PropertyAccess.READ)
    def WinsServerData(self) -> "as":
        """Get WinsServerData."""
        return []

    @dbus_property(access=PropertyAccess.READ)
    def WinsServers(self) -> "au":
        """Get WinsServers."""
        return []
