'use client';

import { useEffect, useState, useCallback } from 'react';
import type { WebApp } from '@twa-dev/types';
import { isDemoMode, getDemoWebApp } from '../utils/demo';

declare global {
  interface Window {
    Telegram?: {
      WebApp?: WebApp;
    };
  }
}

export interface UseTelegramWebAppResult {
  webApp: WebApp | null;
  error: Error | null;
  isLoading: boolean;
  isInitialized: boolean;
}

export function useTelegramWebApp(): UseTelegramWebAppResult {
  const [webApp, setWebApp] = useState<WebApp | null>(null);
  const [error, setError] = useState<Error | null>(null);
  const [isLoading, setIsLoading] = useState(true);
  const [isInitialized, setIsInitialized] = useState(false);

  const initWebApp = useCallback(async () => {
    try {
      setIsLoading(true);
      setError(null);

      if (isDemoMode()) {
        const demoWebApp = getDemoWebApp();
        setWebApp(demoWebApp);
        setIsInitialized(true);
        return;
      }

      if (typeof window !== 'undefined') {
        if (window.Telegram?.WebApp) {
          setWebApp(window.Telegram.WebApp);
          setIsInitialized(true);
        } else {
          throw new Error('Telegram WebApp не найден');
        }
      }
    } catch (err) {
      console.error('Ошибка инициализации WebApp:', err);
      setError(err instanceof Error ? err : new Error('Неизвестная ошибка'));
    } finally {
      setIsLoading(false);
    }
  }, []);

  useEffect(() => {
    initWebApp();
  }, [initWebApp]);

  useEffect(() => {
    if (!webApp) return;

    const handleThemeChange = () => {
      // Обновляем состояние при изменении темы
      setWebApp(prevWebApp => {
        if (!prevWebApp) return null;
        return { ...prevWebApp };
      });
    };

    webApp.onEvent('themeChanged', handleThemeChange);

    return () => {
      webApp.offEvent('themeChanged', handleThemeChange);
    };
  }, [webApp]);

  return { webApp, error, isLoading, isInitialized };
} 