// Pure builder for the Telegram native popup (showPopup) used by the deep-link info modals
// (StaleInviteModal / WelcomeRedeemModal) inside the Mini App. Kept free of the SDK and the DOM so
// it unit-tests in the node environment; the showPopup transport wrapper lives in telegram.ts and
// the wiring (native inside Telegram, the in-app Modal elsewhere) in the modal components.

import type { TelegramPopupParams } from './telegram';

/** BOT_BUTTON_ID is the showPopup button id that means "open the bot chat". */
export const BOT_BUTTON_ID = 'bot';

/** LOGIN_BUTTON_ID is the game-limit popup button that opens the sign-in funnel. */
export const LOGIN_BUTTON_ID = 'login';

/** gameLimitGuestPopup builds the native popup that nudges a guest to sign in when a New-Game start
 *  is capped for guests: a cancel button and a login button (the sign-in funnel). */
export function gameLimitGuestPopup(title: string, message: string, cancelText: string, loginText: string): TelegramPopupParams {
  return { title, message, buttons: [{ id: 'cancel', text: cancelText }, { id: LOGIN_BUTTON_ID, text: loginText }] };
}

/** gameLimitDurablePopup builds the native notice shown to a durable account at its per-kind cap:
 *  an OK button only (finish a current game first). */
export function gameLimitDurablePopup(title: string, message: string, okText: string): TelegramPopupParams {
  return { title, message, buttons: [{ id: 'ok', text: okText }] };
}

/**
 * botInfoPopup builds the native popup for a deep-link info modal: the message with the `{bot}`
 * token replaced by the `@username` as plain text (a native popup has no inline link, unlike the
 * in-app Modal), plus an "open bot" button when a username is known and a closing OK button. With
 * no username it is the message (token removed) and OK only.
 */
export function botInfoPopup(title: string, message: string, username: string, okText: string): TelegramPopupParams {
  const handle = username ? `@${username}` : '';
  const text = (username ? message.replace('{bot}', handle) : message.replace('{bot}', '').replace('  ', ' ')).trim();
  const buttons = username
    ? [{ id: BOT_BUTTON_ID, text: handle }, { id: 'ok', text: okText }]
    : [{ id: 'ok', text: okText }];
  return { title, message: text, buttons };
}
