// plugins/toast.client.ts
import { ElMessage } from 'element-plus'

export default defineNuxtPlugin(() => {
  const MESSAGE_OFFSET = 96
  const originalSuccess = ElMessage.success.bind(ElMessage)
  const originalError = ElMessage.error.bind(ElMessage)
  const originalWarning = ElMessage.warning.bind(ElMessage)
  const originalInfo = ElMessage.info.bind(ElMessage)

  const withOffset = (options: string | Record<string, any>) => {
    if (typeof options === 'string') {
      return { message: options, offset: MESSAGE_OFFSET }
    }

    return {
      offset: MESSAGE_OFFSET,
      ...options
    }
  }

  ElMessage.success = ((options: string | Record<string, any>) => originalSuccess(withOffset(options))) as typeof ElMessage.success
  ElMessage.error = ((options: string | Record<string, any>) => originalError(withOffset(options))) as typeof ElMessage.error
  ElMessage.warning = ((options: string | Record<string, any>) => originalWarning(withOffset(options))) as typeof ElMessage.warning
  ElMessage.info = ((options: string | Record<string, any>) => originalInfo(withOffset(options))) as typeof ElMessage.info

  return {
    provide: {
      toast: {
        success: (message: string) => ElMessage.success(message),
        error: (message: string) => ElMessage.error(message),
        warning: (message: string) => ElMessage.warning(message),
        info: (message: string) => ElMessage.info(message)
      }
    }
  }
})
