import { EventEmitter } from 'events'

export const useDownload = (url: string, filename: string): {
  download: () => void
  progressEmitter: EventEmitter
} => {
  const progressEmitter = new EventEmitter()

  const download = () => {
    const xhr = new XMLHttpRequest()
    xhr.open('GET', url, true)
    xhr.responseType = 'blob'
    xhr.onprogress = (event) => {
      if (event.lengthComputable) {
        const percentComplete = (event.loaded / event.total) * 100
        progressEmitter.emit('progress', percentComplete)
      }
    }
    xhr.onload = function () {
      if (this.status === 200) {
        const blob = new Blob([this.response], { type: 'application/octet-stream' })
        const url = window.URL.createObjectURL(blob)
        const link = document.createElement('a')
        link.href = url
        link.setAttribute('download', filename)
        document.body.appendChild(link)
        link.click()
        link.parentNode?.removeChild(link)
        progressEmitter.emit('done')
      } else {
        progressEmitter.emit('error', new Error('资源已过期或不存在'))
      }
    }
    xhr.onerror = function () {
      progressEmitter.emit('error', new Error('网络错误，下载失败'))
    }
    xhr.send()
  }

  return {
    download,
    progressEmitter,
  }
}