import { Box, Typography } from '@mui/material';
import useAuth from '../hooks/useAuth';
import AuthForm from '../components/Login/AuthForm';
import MemorySlider from '../components/Login/MemorySlider';
import { useNavigate } from 'react-router-dom';
import PopaPopa from '../components/popa-popa';
import useConfig from '../hooks/useConfig';

const Login = () => {
  const navigate = useNavigate();
  const { config, setConfig, saveConfig, handleInputChange } = useConfig();
  const { status, validateSession, refreshSession, authenticateWithElyBy } =
    useAuth();

  const authorization = async () => {
    console.log('Начинаем процесс авторизации...');

    if (!config.username.trim()) {
      console.log('Ошибка: не указан никнейм');
      alert('Введите никнейм!');
      return;
    }

    try {
      // Проверяем, есть ли сохранённый токен
      if (config.accessToken && config.clientToken) {
        console.log('Проверка валидности существующего токена...');
        const isValid = await validateSession(config.accessToken);

        if (!isValid) {
          console.log('Токен недействителен, пытаемся обновить...');
          const refreshedSession = await refreshSession(
            config.accessToken,
            config.clientToken,
          );

          if (!refreshedSession) {
            console.log(
              'Не удалось обновить токен, требуется новая авторизация',
            );
            // Очищаем недействительные токены
            saveConfig({
              accessToken: '',
              clientToken: '',
            });

            // Пытаемся выполнить новую авторизацию
            if (config.password) {
              const newSession = await authenticateWithElyBy(
                config.username,
                config.password,
                saveConfig,
              );
              if (!newSession) {
                console.log('Авторизация не удалась');
                return;
              }
            } else {
              console.log('Требуется ввод пароля для новой авторизации');
              return;
            }
          }
        } else {
          console.log('Токен действителен');
        }
      } else {
        console.log('Токен отсутствует, выполняем авторизацию...');
        // Проверяем наличие пароля
        if (!config.password) {
          console.log('Ошибка: не указан пароль');
          alert('Введите пароль!');
          return;
        }

        const session = await authenticateWithElyBy(
          config.username,
          config.password,
          saveConfig,
        );
        if (!session) {
          console.log('Авторизация не удалась');
          return;
        }
      }

      console.log('Авторизация успешно завершена');
      navigate('/');
    } catch (error) {
      console.log(`ОШИБКА при авторизации: ${error.message}`);
      // Очищаем недействительные токены при ошибке
      saveConfig({
        accessToken: '',
        clientToken: '',
      });
    }
  };

  return (
    <Box>
      <PopaPopa />
      <AuthForm
        config={config}
        handleInputChange={handleInputChange}
        onLogin={authorization}
      />
    </Box>
  );
};

export default Login;
