from __future__ import annotations

from typing import Optional

from configs import BotSettings

# Настройка экспорта в модули
__all__ = ("is_command", "find_argument")


def is_command(message: Optional[str]) -> bool:
    """
    Проверяет, является ли сообщение командой.

    Сообщение считается командой, если:
      1. Оно не пустое;
      2. Начинается с префикса команды, указанного в настройках.

    Args:
        message (Optional[str]): Входное сообщение.

    Returns:
        bool: True, если сообщение является командой, иначе False.

    Пример:
        >>> is_command("/start")
        True
        >>> is_command("hello")
        False
    """
    if not message:
        return False
    return message.strip().startswith(BotSettings.PREFIX)


def find_argument(message: Optional[str]) -> Optional[str]:
    """
    Извлекает аргумент команды из сообщения.

    Аргументом считается текст после первой команды и пробела.
    Если аргумента нет — возвращает None.

    Args:
        message (Optional[str]): Входное сообщение.

    Returns:
        Optional[str]: Аргумент команды или None, если его нет.

    Пример:
        >>> find_argument("/start referrer")
        'referrer'
        >>> find_argument("/start")
        None
        >>> find_argument("hello")
        None
    """
    if not is_command(message):
        return None

    parts = message.strip().split(maxsplit=1)
    return parts[1] if len(parts) > 1 else None
