# stdlib
import os
import pathlib
import sys
from typing import List

PathLike = str | pathlib.Path | os.PathLike

class NotificationHandle:
	if sys.platform != "win32":
		if sys.platform == "linux":

			def id(self) -> int: ...  # noqa: A001  # pylint: disable=redefined-builtin
		def update(self) -> NotificationHandle: ...
		def appname(self, appname: str) -> NotificationHandle: ...
		def summary(self, summary: str) -> NotificationHandle: ...
		def subtitle(self, subtitle: str) -> NotificationHandle: ...
		def image_path(self, path: PathLike) -> NotificationHandle: ...
		def sound_name(self, name: str) -> NotificationHandle: ...
		def body(self, body: str) -> NotificationHandle: ...
		def icon(self, icon: PathLike) -> NotificationHandle: ...
		def auto_icon(self) -> NotificationHandle: ...
		def timeout(self, timeout: int) -> NotificationHandle: ...
		def urgency(self, urgency: int) -> NotificationHandle: ...
		def finalize(self) -> NotificationHandle: ...

		if sys.platform == "win32":

			def show(self) -> None: ...

		else:

			def show(self) -> NotificationHandle: ...
		def get_appname(self) -> str: ...
		def get_summary(self) -> str: ...
		def get_subtitle(self) -> str | None: ...
		def get_body(self) -> str: ...
		def get_icon(self) -> str: ...
		def get_timeout(self) -> int: ...

class Notification:
	def appname(self, appname: str) -> Notification: ...
	def summary(self, summary: str) -> Notification: ...
	def subtitle(self, subtitle: str) -> Notification: ...
	def image_path(self, path: PathLike) -> Notification: ...
	def sound_name(self, name: str) -> Notification: ...
	def body(self, body: str) -> Notification: ...
	def icon(self, icon: PathLike) -> Notification: ...
	def auto_icon(self) -> Notification: ...
	def timeout(self, timeout: int) -> Notification: ...
	def urgency(self, urgency: int) -> Notification: ...
	def id(self, id: int) -> Notification: ...  # noqa: A002  # pylint: disable=redefined-builtin
	def finalize(self) -> Notification: ...

	if sys.platform == "win32":

		def show(self) -> Notification: ...

	else:

		def show(self) -> NotificationHandle: ...
	def get_appname(self) -> str: ...
	def get_summary(self) -> str: ...
	def get_subtitle(self) -> str | None: ...
	def get_body(self) -> str: ...
	def get_icon(self) -> str: ...
	def get_timeout(self) -> int: ...

class ServerInformation:
	name: str
	vendor: str
	version: str
	spec_version: str

def get_server_information() -> ServerInformation: ...
def get_capabilities() -> List[str]: ...

TIMEOUT_NEVER: int
TIMEOUT_DEFAULT: int
URGENCY_LOW: int
URGENCY_NORMAL: int
URGENCY_CRITICAL: int
