import { defineStore } from 'pinia'

type ToastType = 'success' | 'error' | 'info'

export type Toast = {
  id: number
  type: ToastType
  message: string
  timeout?: number
}

let counter = 1

export const useToastStore = defineStore('toast', {
  state: () => ({
    toasts: [] as Toast[]
  }),
  actions: {
    push(message: string, type: ToastType = 'info', timeout = 2500) {
      const id = counter++
      const toast: Toast = { id, type, message, timeout }
      this.toasts.push(toast)
      if (timeout && timeout > 0) {
        setTimeout(() => this.remove(id), timeout)
      }
      return id
    },
    success(message: string, timeout = 2500) {
      return this.push(message, 'success', timeout)
    },
    error(message: string, timeout = 3000) {
      return this.push(message, 'error', timeout)
    },
    info(message: string, timeout = 2500) {
      return this.push(message, 'info', timeout)
    },
    remove(id: number) {
      this.toasts = this.toasts.filter(t => t.id !== id)
    }
  }
})

