import PocketBase from 'pocketbase';

// Создаем единый экземпляр PocketBase для всех проектов
const pb = new PocketBase(import.meta.env.VITE_POCKETBASE_URL);

// Функция для проверки прав доступа к проекту
const checkProjectAccess = async (userId, projectName) => {
  try {
    const user = await pb.collection('users').getOne(userId);
    return user.projects?.includes(projectName) || false;
  } catch (error) {
    console.error('Ошибка при проверке доступа к проекту:', error);
    return false;
  }
};

// Функция для входа в систему
const login = async (login, password) => {
  try {
    const authData = await pb.collection('users').authWithPassword(login, password);
    return authData.record;
  } catch (error) {
    console.error('Ошибка входа:', error);
    throw error;
  }
};

// Функция для регистрации
const register = async (login, password, email = null, projects = []) => {
  try {
    const formData = new FormData();
    formData.append('login', login);
    formData.append('username', login);
    formData.append('email', email || '');
    formData.append('password', password);
    formData.append('passwordConfirm', password);
    formData.append('emailVisibility', 'false');
    formData.append('role', 'user');
    formData.append('projects', JSON.stringify(projects));
    formData.append('description', '');
    formData.append('review_count', '0');
    formData.append('average_rating', '0');
    formData.append('xp', '0');
    formData.append('level', '1');
    formData.append('showcase', '[]');

    const record = await pb.collection('users').create(formData);
    pb.authStore.clear();
    const authData = await pb.collection('users').authWithPassword(login, password);
    return { user: authData.record, profile: authData.record };
  } catch (error) {
    console.error('Ошибка при регистрации:', error);
    throw error;
  }
};

// Функция для выхода
const logout = () => {
  pb.authStore.clear();
};

// Функция для получения текущего пользователя
const getCurrentUser = () => {
  return pb.authStore.model;
};

// Функция для обновления профиля пользователя
const updateProfile = async (userId, data) => {
  try {
    const updatedProfile = await pb.collection('users').update(userId, data);
    return updatedProfile;
  } catch (error) {
    console.error('Ошибка при обновлении профиля:', error);
    throw error;
  }
};

export {
  pb,
  login,
  register,
  logout,
  getCurrentUser,
  updateProfile,
  checkProjectAccess
}; 