export const saveAuthTokens = (data) => {
  const { access_token, refresh_token, expires_in } = data;

  // TODO: раскомментировать, когда поправят expires_in на бэке
  // const expiresAt = Date.now() + expires_in * 1000

  localStorage.setItem('access_token', access_token);
  localStorage.setItem('refresh_token', refresh_token);
  // localStorage.setItem('expires_at', expiresAt.toString())
};

export const getAuthToken = () => {
  const access_token = localStorage.getItem('access_token');

  return access_token;
};

export const isTokenExpired = () => {
  try {
    const token = getAuthToken();
    if (!token) {
      return true;
    }

    // TODO: с бэка сейчас приходит expired_in: null. Если поправят, то это логика будет не нужна. Пока что оставляю так
    const base64 = token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/');
    const jsonPayload = decodeURIComponent(
      atob(base64)
        .split('')
        .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))
        .join(''),
    );

    const payload = JSON.parse(jsonPayload);
    const now = Math.floor(Date.now() / 1000);

    // для проверки времени жизни токена
    const expirationDate = new Date(payload.exp * 1000);
    console.log('Токен истекает:', expirationDate.toLocaleString('ru-RU'));

    return payload.exp < now;
  } catch (err) {
    console.error('Ошибка при разборе токена:', err.message);
    return true;
  }
};

export const clearAuthTokens = () => {
  localStorage.removeItem('access_token');
  localStorage.removeItem('refresh_token');
};

// TODO: отсутствует функционал обновления токена. добавить логику когда сделают на бэке. пока просто очистка LS
export const updateToken = () => {
  clearAuthTokens();
};
