import { useState } from 'react';

interface AuthSession {
  accessToken: string;
  clientToken: string;
  selectedProfile: {
    id: string;
    name: string;
  };
}

export default function useAuth() {
  const [status, setStatus] = useState('idle');

  // Проверка валидности токена
  const validateSession = async (accessToken: string): Promise<boolean> => {
    try {
      setStatus('validating');
      const response = await window.electron.ipcRenderer.invoke(
        'validate-token',
        accessToken,
      );
      setStatus('idle');
      return response.valid;
    } catch (error) {
      console.error('Ошибка при валидации токена:', error);
      setStatus('error');
      return false;
    }
  };

  // Обновление токена
  const refreshSession = async (
    accessToken: string,
    clientToken: string,
  ): Promise<AuthSession | null> => {
    try {
      setStatus('refreshing');
      const response = await window.electron.ipcRenderer.invoke(
        'refresh-token',
        { accessToken, clientToken },
      );
      setStatus('idle');
      return response;
    } catch (error) {
      console.error('Ошибка при обновлении токена:', error);
      setStatus('error');
      return null;
    }
  };

  // Аутентификация в Ely.by
  const authenticateWithElyBy = async (
    username: string,
    password: string,
    saveConfigFunc: Function,
  ): Promise<AuthSession | null> => {
    try {
      setStatus('authenticating');
      const response = await window.electron.ipcRenderer.invoke(
        'authenticate',
        { username, password },
      );

      if (response && response.accessToken) {
        // Правильно сохраняем данные в конфигурации
        saveConfigFunc({
          username: response.selectedProfile.name, // Имя игрока как строка
          uuid: response.selectedProfile.id,
          accessToken: response.accessToken,
          clientToken: response.clientToken,
          memory: 4096, // Сохраняем значение по умолчанию или из предыдущей конфигурации
        });

        setStatus('authenticated');
        return response;
      }

      setStatus('error');
      return null;
    } catch (error) {
      console.error('Ошибка при аутентификации:', error);
      setStatus('error');
      return null;
    }
  };

  return {
    status,
    validateSession,
    refreshSession,
    authenticateWithElyBy,
  };
}
