// stores/helpers/api.js
import axios from 'axios'

const API_BASE_URL = 'https://begushiybashkir.ru/api/v1'

// Создаем экземпляр axios с базовой конфигурацией
export const apiClient = axios.create({
  baseURL: API_BASE_URL,
  withCredentials: true
})

// Интерцептор для автоматического добавления токена
apiClient.interceptors.request.use((config) => {
  const token = localStorage.getItem('auth_token')
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
})

// Интерцептор для обработки ошибок
apiClient.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.response?.status === 401) {
      localStorage.removeItem('auth_token')
      window.location.href = '/login'
    }
    return Promise.reject(error)
  }
)

// Утилита для обработки ошибок
export const handleApiError = (error) => {
  const message = error.response?.data?.message || error.message || 'Произошла ошибка'
  return { success: false, error: message }
}

// Утилита для выполнения запросов с loading state
export const withLoading = async (store, fn) => {
  store.loading = true
  store.error = ''
  try {
    return await fn()
  } catch (error) {
    const result = handleApiError(error)
    store.error = result.error
    return result
  } finally {
    store.loading = false
  }
}

export const createLoadingHandler = (store) => {
  return async (fn) => {
    if (store && typeof store.loading !== 'undefined') {
      store.loading = true
    }
    if (store && typeof store.error !== 'undefined') {
      store.error = ''
    }
    
    try {
      return await fn()
    } catch (error) {
      const result = handleApiError(error)
      if (store && typeof store.error !== 'undefined') {
        store.error = result.error
      }
      return result
    } finally {
      if (store && typeof store.loading !== 'undefined') {
        store.loading = false
      }
    }
  }
}


export const api = apiClient;
export default apiClient;