import { useState, useEffect, useCallback } from 'react';

/**
 * Хук для автосохранения прогресса авторизации
 * Сохраняет состояние формы между сессиями
 */
export const useAuthProgress = () => {
  const [progress, setProgress] = useState(null);
  const [isLoaded, setIsLoaded] = useState(false);

  // Загружаем сохраненный прогресс при инициализации
  useEffect(() => {
    try {
      const savedProgress = localStorage.getItem('authProgress');
      if (savedProgress) {
        const parsedProgress = JSON.parse(savedProgress);
        
        // Проверяем, что прогресс не старше 1 часа
        const oneHourAgo = Date.now() - (60 * 60 * 1000);
        if (parsedProgress.timestamp && parsedProgress.timestamp > oneHourAgo) {
          setProgress(parsedProgress);
        } else {
          // Удаляем устаревший прогресс
          localStorage.removeItem('authProgress');
        }
      }
    } catch (error) {
      console.warn('Failed to load auth progress:', error);
      localStorage.removeItem('authProgress');
    } finally {
      setIsLoaded(true);
    }
  }, []);

  // Сохраняем прогресс
  const saveProgress = useCallback((data) => {
    try {
      const progressData = {
        ...data,
        timestamp: Date.now()
      };
      localStorage.setItem('authProgress', JSON.stringify(progressData));
      setProgress(progressData);
    } catch (error) {
      console.warn('Failed to save auth progress:', error);
    }
  }, []);

  // Очищаем прогресс
  const clearProgress = useCallback(() => {
    try {
      localStorage.removeItem('authProgress');
      setProgress(null);
    } catch (error) {
      console.warn('Failed to clear auth progress:', error);
    }
  }, []);

  // Восстанавливаем данные формы из прогресса
  const restoreFormData = useCallback((defaultData = {}) => {
    if (!progress) return defaultData;
    
    return {
      ...defaultData,
      step: progress.step || 1,
      mode: progress.mode || null,
      password: '', // Никогда не восстанавливаем пароль
      confirmPassword: '',
      agreeToTerms: progress.agreeToTerms || false,
      isNewUser: progress.isNewUser !== undefined ? progress.isNewUser : true
    };
  }, [progress]);

  return {
    progress,
    isLoaded,
    saveProgress,
    clearProgress,
    restoreFormData
  };
};
