"""
Все пользовательские тексты и подписи кнопок.

Шаблоны с плейсхолдерами форматируются на месте вызова через .format(...).
"""


class AuthTexts:
    # bot_started — заблокированный пользователь
    BLOCKED = (
        "⛔ Ваш номер не найден в системе. Доступ заблокирован.\n"
        "Обратитесь к администратору для подключения."
    )
    # /start — заблокированный пользователь
    BLOCKED_SHORT = "⛔ Доступ заблокирован. Обратитесь к администратору."
    # bot_started — новый пользователь
    WELCOME_NEW = (
        "👋 Добро пожаловать в систему технической поддержки!\n\n"
        "Для входа нажмите кнопку ниже и поделитесь своим номером телефона."
    )
    # /start — новый пользователь
    WELCOME_START = (
        "👋 Добро пожаловать!\n\n"
        "Поделитесь номером телефона для доступа к системе."
    )
    # /start — пользователь не авторизован
    SHARE_PHONE = "Поделитесь номером телефона для доступа:"
    # bot_started — возвращающийся пользователь (префикс перед текстом меню)
    WELCOME_BACK = "👋 С возвращением!\n\n"
    # Успешная авторизация (префикс перед текстом меню)
    AUTHORIZED = "✅ Вы успешно авторизованы!\n\n"
    # Ошибки при шаринге контакта
    CONTACT_READ_ERROR = "Не удалось прочитать контакт. Попробуйте ещё раз."
    CONTACT_NO_PHONE = "В контакте не найден номер телефона. Попробуйте ещё раз."
    # Загрузка после шаринга номера
    LOADING = "⏳ Проверяем номер..."
    # Телефон не найден в белом списке
    PHONE_NOT_FOUND = (
        "⛔ Ваш номер не найден в системе.\n"
        "Доступ заблокирован. Обратитесь к администратору для подключения."
    )


class TicketTexts:
    # Шаг 1 — приглашение описать проблему
    ENTER_DESCRIPTION = (
        "📝 Опишите вашу проблему.\n\n"
        "Вы также можете прикрепить файлы, фото или голосовые сообщения.\n"
        "Когда закончите — нажмите «👁 Перейти к предпросмотру»."
    )
    # Прислали что-то без текста и без вложений
    NEED_TEXT = "❗ Пожалуйста, напишите описание проблемы текстом."
    # Прислали файл, но нет текста
    FILE_RECEIVED_NEED_TEXT = "✅ Вложение принято! Теперь напишите описание проблемы текстом:"
    # Описание принято, можно добавить ещё
    DESCRIPTION_ACCEPTED = (
        "✏️ Описание принято. Вы можете добавить ещё файлы "
        "или нажмите «👁 Перейти к предпросмотру»."
    )
    # Нажали «Готово» без описания — уведомление
    PREVIEW_NEED_TEXT_NOTIF = "Сначала опишите проблему!"
    # Нажали «Готово» без описания — сообщение
    PREVIEW_NEED_TEXT = "❗ Пожалуйста, сначала напишите описание проблемы."
    # Вернулись к редактированию из предпросмотра
    CONTINUE_EDITING = (
        "✏️ Продолжайте добавлять описание или вложения.\n"
        "Нажмите «👁 Перейти к предпросмотру» когда будете готовы."
    )
    # Уведомление при отмене создания
    CANCEL_NOTIF = "Создание отменено"
    # Отправка заявки
    SENDING = "⏳ Отправляем заявку…"
    # Успешное создание
    CREATED = "✅ Заявка успешно создана!"
    # Номер созданной заявки: .format(number=n)
    CREATED_NUMBER = "Номер заявки: #{number}"
    # Подпись после создания
    CREATED_CONTACT = "Наши специалисты свяжутся с вами в ближайшее время."

    # Предпросмотр
    PREVIEW_HEADER = "📋 Предпросмотр заявки:"
    PREVIEW_ATTACHMENTS_HEADER = "📎 Вложения:"
    PREVIEW_CONFIRM_PROMPT = "Всё верно? Подтвердите или вернитесь к редактированию."

    # Подписи вложений в предпросмотре
    ATT_PHOTO = "🖼 Фото"
    ATT_VIDEO = "📹 Видео"
    ATT_AUDIO = "🎤 Голосовое"
    ATT_AUDIO_DUR = "🎤 Голосовое ({mins:02d}:{secs:02d})"
    ATT_FILE = "📎 {fname}"
    ATT_FILE_UNNAMED = "📎 Файл"
    ATT_OTHER = "📎 Вложение"


class TicketListTexts:
    LOADING = "⏳ Загружаем список заявок..."
    NO_ORG = "⚠️ Ваша организация не привязана к Intradesk. Обратитесь к администратору."
    EMPTY = "📭 Активных заявок нет."
    # Заголовок списка: .format(total=n, page=n, pages=n)
    HEADER = "📋 Активные заявки (всего: {total}) — стр. {page}/{pages}"
    NO_COMMENTS = "💬 Нет комментариев"


class TicketDetailTexts:
    LOADING = "⏳ Загружаем заявку..."
    NOT_FOUND = "⚠️ Заявка не найдена. Вернитесь к списку."
    DESCRIPTION_HEADER = "📝 Описание:"
    COMMENTS_HEADER = "💬 Комментарии ({count}):"
    NO_COMMENTS = "💬 Комментариев нет"
    # Закрытие заявки
    CLOSING = "⏳ Закрываем заявку..."
    # .format(num_str=" #123" или "")
    CLOSED = "✅ Заявка{num_str} закрыта."
    CLOSE_ERROR = "⚠️ Не удалось закрыть заявку. Попробуйте позже."
    CLOSE_NUMBER_ERROR = "⚠️ Не удалось определить номер заявки. Вернитесь к списку."
    GENERIC_ERROR = "Ошибка"


class CommentTexts:
    # .format(num_str=" к заявке #123" или "")
    PROMPT = (
        "💬 Напишите комментарий{num_str}:\n\n"
        "Можно отправить текст, файл, фото или голосовое сообщение.\n"
        "Нажмите «← Назад к заявке» для отмены."
    )
    EMPTY_ERROR = "❗ Комментарий не может быть пустым. Напишите текст или прикрепите файл:"
    FILE_ONLY = "📎 Файл прикреплён"
    # .format(num_str=" к заявке #123" или "")
    SUCCESS = "✅ Комментарий{num_str} успешно отправлен!"
    ERROR = "⚠️ Не удалось отправить комментарий. Попробуйте позже."


class MenuTexts:
    LOADING = "⏳ Загружаем меню..."
    SEPARATOR = "━" * 16
    # .format(org_name="...")
    ORG_HEADER = "🏢  {org_name}"
    NO_ORG_HEADER = "🏠  Поддержка"
    NO_TICKETS = "📭 Активных заявок нет"
    NO_TICKETS_HINT = "Нажмите «Создать заявку» и мы\nсвяжемся с вами в ближайшее время."
    # .format(active=n)
    ACTIVE_COUNT = "📋 Активных заявок: {active}"
    # .format(num_str=" (заявка #123)" или "")
    LAST_COMMENT = "💬 Последний ответ{num_str}:"
    # .format(author="...", short_date="...")
    LAST_COMMENT_AUTHOR = "— {author}, {short_date}"
    NO_NEW_COMMENTS = "💬 Новых ответов нет"
    NO_ORG_DATA = "📭 Нет данных об организации"
    CHOOSE_ACTION = "Выберите действие 👇"
    # Префикс при /cancel с активным флоу
    CANCEL_PREFIX = "❌ Действие отменено.\n\n"


class QuickReplyTexts:
    # .format(number=task_number, text=user_text)
    CONFIRM = (
        "📨 Отправить как ответ на заявку #{number}?\n\n"
        "«{text}»"
    )
    # .format(number=task_number)
    SENT  = "✅ Ответ на заявку #{number} отправлен."
    ERROR = "⚠️ Не удалось отправить ответ. Попробуйте через меню."


class Btn:
    """Подписи всех inline-кнопок."""
    # Главное меню
    CREATE_TICKET = "📝 Создать заявку"
    VIEW_TICKETS  = "📋 Мои заявки"
    MAIN_MENU     = "🏠 Главное меню"
    # Авторизация
    SHARE_CONTACT = "📱 Поделиться контактом"
    # Создание заявки
    DONE_TICKET    = "✅ Готово"
    CONFIRM_TICKET = "✅ Подтвердить"
    EDIT_TICKET    = "✏️ Продолжить редактирование"
    CANCEL_TICKET  = "❌ Отменить создание"
    # Навигация по заявкам
    PREV_PAGE      = "← Пред."
    NEXT_PAGE      = "След. →"
    BACK_TO_MENU   = "← Назад в меню"
    BACK_TO_LIST   = "← К списку заявок"
    BACK_TO_TICKET = "← Назад к заявке"
    BACK_TO_TICKETS = "← К списку"
    # Карточка заявки
    ADD_COMMENT  = "💬 Оставить комментарий"
    CLOSE_TICKET = "🔒 Закрыть заявку"
    # Уведомления и быстрый ответ
    REPLY_TO_TICKET = "💬 Ответить"
    OPEN_TICKET     = "📋 К заявке"
    CONFIRM_REPLY   = "✅ Отправить"
    CANCEL_REPLY    = "❌ Отмена"
    CHOOSE_TICKET   = "📋 Выбрать другую заявку"
