import PocketBase from 'pocketbase';

// URL PocketBase сервера
const POCKETBASE_URL = import.meta.env.PUBLIC_POCKETBASE_URL || 'http://localhost:8090';

// Создание экземпляра PocketBase
export const pb = new PocketBase(POCKETBASE_URL);

// Функция для загрузки сессии из cookies (вызывать на клиенте)
export function loadAuthFromCookie(): void {
  if (typeof document !== 'undefined') {
    pb.authStore.loadFromCookie(document.cookie);
  }
}

// Функция для сохранения сессии в cookies
export function saveAuthToCookie(): void {
  if (typeof document !== 'undefined') {
    document.cookie = pb.authStore.exportToCookie({ sameSite: 'lax', secure: location.protocol === 'https:' });
  }
}

// Автоматическое восстановление сессии при загрузке страницы
if (typeof document !== 'undefined') {
  // Загружаем из cookies при инициализации
  pb.authStore.loadFromCookie(document.cookie);
  
  // Подписываемся на изменения
  pb.authStore.onChange(() => {
    saveAuthToCookie();
  }, true);
}

// Типы для аутентификации
export interface AuthRecord {
  id: string;
  email: string;
  name: string;
  avatar?: string;
  emailVisibility: boolean;
  verified: boolean;
  created: string;
  updated: string;
}

// Функция входа пользователя
export async function login(email: string, password: string): Promise<AuthRecord> {
  const authData = await pb.collection('users').authWithPassword(email, password);
  return authData.record as AuthRecord;
}

// Функция регистрации пользователя
export async function register(
  email: string, 
  password: string, 
  passwordConfirm: string,
  name?: string
): Promise<AuthRecord> {
  const record = await pb.collection('users').create({
    email,
    password,
    passwordConfirm,
    name: name || email.split('@')[0],
    emailVisibility: true,
  });
  
  // Автоматический вход после регистрации
  await login(email, password);
  
  return record as AuthRecord;
}

// Функция выхода пользователя
export function logout(): void {
  pb.authStore.clear();
}

// Функция получения текущего пользователя
export function getCurrentUser(): AuthRecord | null {
  return pb.authStore.model as AuthRecord | null;
}

// Функция проверки аутентификации
export function isAuthenticated(): boolean {
  return pb.authStore.isValid && !!pb.authStore.model;
}

// Функция отправки запроса на сброс пароля
export async function requestPasswordReset(email: string): Promise<void> {
  await pb.collection('users').requestPasswordReset(email);
}

// Функция сброса пароля
export async function resetPassword(token: string, password: string, passwordConfirm: string): Promise<void> {
  await pb.collection('users').confirmPasswordReset(token, password, passwordConfirm);
}

// Функция отправки повторного письма для подтверждения email
export async function resendVerificationEmail(email: string): Promise<void> {
  await pb.collection('users').requestVerification(email);
}

// Функция подтверждения email
export async function confirmVerification(token: string): Promise<void> {
  await pb.collection('users').confirmVerification(token);
}
