import { defineStore } from 'pinia'
import { ref } from 'vue'

export const useApiStore = defineStore('api', () => {
  const api = useApi()
  const loading = ref(false)
  const error = ref<any[]>([])

  const apiPost = async (url: string, data?: any) => {
    loading.value = true
    error.value = []
    
    try {
      const response = await api.post(url, data)
      
      return response?.data || response
    } catch (e) {
      error.value = [e instanceof Error ? e.message : 'Erro desconhecido'];
      
      return Promise.reject(e)
    } finally {
      loading.value = false
    }
  }

  const apiGet = async (url: string, params?: Record<string, any>) => {
    loading.value = true
    error.value = []
    try {
      const response = await api.get(url, params)
      return response?.data || response
    } catch (e) {
      error.value = [e instanceof Error ? e.message : 'Erro desconhecido'];
      return Promise.reject(e)
    } finally {
      loading.value = false
    }
  }

  const apiPut = async (url: string, data?: any) => {
    loading.value = true
    error.value = []
    try {
      const response = await api.put(url, data)
      return response?.data || response
    } catch (e) {
      error.value = [e instanceof Error ? e.message : 'Erro desconhecido'];
      return Promise.reject(e)
    } finally {
      loading.value = false
    }
  }

  const apiDel = async (url: string) => {
    loading.value = true
    error.value = []
    try {
      const response = await api.del(url)
      return response?.data || response
    } catch (e) {
      error.value = [e instanceof Error ? e.message : 'Erro desconhecido'];
      return Promise.reject(e)
    } finally {
      loading.value = false
    }
  }

  return { 
    loading, 
    error, 
    apiPost, 
    apiPut,
    apiGet,
    apiDel
  }
}, {
  persist: {
    storage: persistedState.cookiesWithOptions({
      maxAge: 60 * 60 * 24 * 7
    })
  }
})