addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
});

const start_images = 1;
const end_images = 47;
const image_folder = 'marley';

const default_image = `https://dustin.wtf/${image_folder}/1.jpg`;

async function fetchImage() {
  const imageUrl = `https://dustin.wtf/${image_folder}/${Math.floor(Math.random() * (end_images - start_images) + start_images)}.jpg`;

  let imageFile = await fetch(imageUrl);
  let type = imageFile.headers.get('content-type');

  if (type.includes('text/plain')) {
    imageUrl = default_image;
    imageFile = await fetch(default_image);
    type = imageFile.headers.get('content-type');
  }

  let { readable, writable } = new TransformStream();
  imageFile.body.pipeTo(writable);

  return { url: imageUrl, file: readable, type };
}

async function handleRequest(request) {
  const { url, file, type } = await fetchImage();

  return new Response(file, {
    headers: {
      'x-original-url': url,
      'content-type': type
    }
  });
}