"""Plist parser plugin for MacOS Airport plist files."""

from plaso.containers import events
from plaso.parsers import plist
from plaso.parsers.plist_plugins import interface


class MacOSAirportEventData(events.EventData):
    """MacOS airport event data.

    Attributes:
      last_connected_time (dfdatetime.DateTimeValues): last date and time MacOS
          Airport connected to the Wi-Fi network.
      security_type (str): Wi-Fi security type.
      ssid (str): Wi-Fi SSID.
    """

    DATA_TYPE = "macos:airport:entry"

    def __init__(self):
        """Initializes event data."""
        super().__init__(data_type=self.DATA_TYPE)
        self.last_connected_time = None
        self.security_type = None
        self.ssid = None


class MacOSAirportPlistPlugin(interface.PlistPlugin):
    """Plist parser plugin for Airport plist files."""

    NAME = "airport"
    DATA_FORMAT = "Airport plist file"

    PLIST_PATH_FILTERS = frozenset(
        [interface.PlistPathFilter("com.apple.airport.preferences.plist")]
    )

    PLIST_KEYS = frozenset(["RememberedNetworks"])

    # pylint: disable=arguments-differ
    def _ParsePlist(self, parser_mediator, match=None, **unused_kwargs):
        """Extracts relevant Airport entries.

        Args:
          parser_mediator (ParserMediator): mediates interactions between parsers
              and other components, such as storage and dfVFS.
          match (Optional[dict[str: object]]): keys extracted from PLIST_KEYS.
        """
        for plist_key in match.get("RememberedNetworks", []):
            event_data = MacOSAirportEventData()
            event_data.last_connected_time = self._GetDateTimeValueFromPlistKey(
                plist_key, "LastConnected"
            )
            event_data.security_type = plist_key.get("SecurityType")
            event_data.ssid = plist_key.get("SSIDString")

            parser_mediator.ProduceEventData(event_data)


plist.PlistParser.RegisterPlugin(MacOSAirportPlistPlugin)
