import { TokenPack } from '../constants/tokenPacks';
import apiService from '../services/api';
import { getCurrentUserId } from '../constants/user';

export const paymentService = {
  showBuyTokensPopup: async (pack: TokenPack, onSuccess?: (userData?: any) => void) => {
    // Проверяем наличие Telegram WebApp
    if (!window.Telegram?.WebApp) {
      console.error('Telegram WebApp не доступен');
      return;
    }

    const webApp = window.Telegram.WebApp;
    const userId = getCurrentUserId();

    try {
      // Получаем ссылку на инвойс от бэкенда
      const invoiceLink = await apiService.createInvoiceLink(
        userId,
        pack.price,
        pack.tokens + pack.bonusTokens
      );

      // Открываем встроенный платеж Telegram без предварительного подтверждения
      webApp.openInvoice(invoiceLink, async (status: 'paid' | 'cancelled' | 'failed' | 'pending') => {
        if (status === 'paid') {
          // Добавляем задержку перед запросом данных пользователя,
          // чтобы дать серверу время на обработку транзакции и обновление баланса
          setTimeout(async () => {
            try {
              // Получаем обновленную информацию о пользователе
              const userData = await apiService.getUserInfo(userId);
              
              if (onSuccess) {
                onSuccess(userData);
              }
            } catch (error) {
              console.error('Ошибка при получении данных пользователя:', error);
              
              // Даже если не удалось получить данные, вызываем onSuccess
              if (onSuccess) {
                onSuccess();
              }
            }
          }, 1000); // Задержка в 1 секунду
        }
      });
    } catch (error) {
      console.error('Ошибка при создании инвойса:', error);
      webApp.showAlert('Произошла ошибка при создании платежа. Пожалуйста, попробуйте позже.');
    }
  }
};
