// Libs
// -----------------------------------------------------------------------------
import { makeAutoObservable, runInAction } from 'mobx';

// App
// -----------------------------------------------------------------------------
import request from 'services/request';
import { environment } from 'enviroments/enviroments';
import { TypeCurrentUser } from 'types/default';

/**
 * Информация о текущем пользователе.
 */
export class CurrentUserStore {
  // Текущий пользователь
  user: TypeCurrentUser | null = null;

  // Выполняется ли загрузка
  isLoading = false;

  constructor() {
    makeAutoObservable(this);
  }

  // Загрузить текущего пользователя
  fetchCurrentUser = async (): Promise<void> => {
    this.isLoading = true;
    try {
      const response = await request<void, TypeCurrentUser>({
        method: 'GET',
        url: environment.endPoints.accounts.currentUser,
      });

      const currentUser = response.data;

      runInAction(() => {
        this.user = currentUser;
      });
    } finally {
      runInAction(() => {
        this.isLoading = false;
      });
    }
  };
}
