export async function convertImageToBlob({
  url,
  width,
  height,
  type,
}: {
  url: string
  width?: number // Ширина необязательна
  height?: number // Высота необязательна
  type: string
}): Promise<Blob> {
  if (!width && !height) {
    throw new Error('Необходимо указать хотя бы одно значение: width или height.')
  }

  return new Promise((resolve, reject) => {
    const img = new Image()

    img.onload = () => {
      // Вычисляем размеры, сохраняя пропорции
      const aspectRatio = img.naturalWidth / img.naturalHeight
      const targetWidth = width || height! * aspectRatio
      const targetHeight = height || width! / aspectRatio

      // Создаем canvas и рисуем изображение
      const canvas = document.createElement('canvas')
      canvas.width = Math.round(targetWidth)
      canvas.height = Math.round(targetHeight)
      const context = canvas.getContext('2d')

      if (!context) {
        return reject(new Error('Ошибка создания контекста'))
      }
      context.drawImage(img, 0, 0, canvas.width, canvas.height)

      // Конвертируем canvas в Blob
      canvas.toBlob(
        (blob) => {
          if (blob) {
            resolve(blob)
          } else {
            reject(new Error('Ошибка создания изображения'))
          }
        },
        type,
        1.0,
      )

      URL.revokeObjectURL(url)
    }

    img.onerror = () => {
      reject(new Error('Ошибка загрузки изображения'))
    }

    img.src = url
  })
}
