import { createContext } from 'react'
import type { CurrentUser } from '@/api/auth'

export type AuthStatus = 'loading' | 'authenticated' | 'unauthenticated'

export interface AuthContextValue {
  user: CurrentUser | null
  status: AuthStatus
  /** Вход по email/паролю: сохраняет access-токен и загружает профиль. */
  login: (email: string, password: string) => Promise<void>
  /** Выход: инвалидирует refresh-сессию на backend и очищает локальное состояние. */
  logout: () => Promise<void>
  /**
   * Перечитать профиль (`GET /users/me`) и обновить контекст — вызывается
   * после правки профиля/аватара (страница `/profile`), чтобы имя и
   * аватар в топбаре обновились без перезагрузки страницы.
   */
  refreshUser: () => Promise<void>
}

/**
 * Контекст сессии пользователя. Вынесен в отдельный файл (не в AuthProvider.tsx),
 * чтобы файл компонента экспортировал только React-компонент — это нужно
 * react-refresh для корректного fast refresh в dev-режиме.
 */
export const AuthContext = createContext<AuthContextValue | null>(null)
