import express from 'express'

export function getRandomPort () {
  return 1000 + (Math.random() * 39000) >> 0
}

export async function createMockServer ({ port }) {
  const app = express()
  const server = await new Promise(resolve => {
    const server = app.listen(port, () => resolve(server))
  })
  server.respondWith = function (routes) {
    for (const [route, data] of Object.entries(routes)) {
      if (typeof data === 'function') {
        app.get(route, data)
      } else {
        app.get(route, (req, res) => res.json(data))
      }
    }
  }
  return server
}

export function generateSimpleViteManifest (mapping) {
  const viteManifest = {}
  for (const [file, value] of Object.entries(mapping)) {
    viteManifest[file] = {
      file,
      meta: typeof value === 'string' ? { manifests: [{ namespace: value }] } : {}
    }
    if (typeof value === 'object') Object.assign(viteManifest[file], value)
  }
  return viteManifest
}