import http from 'http'
import serveHandler from 'serve-handler'
import puppeteer from 'puppeteer'
import { parse } from 'csv'
import { createReadStream } from 'fs'

async function createUML (browser, code, fname) {
  const page = await browser.newPage()
  await page.goto('http://localhost:8080/edit.html')
  await page.evaluate((codeIn) => {
    document.codemirrorEditor.setValue(codeIn)
  }, code)
  const input = await page.$('#text')
  await input.type(' ')
  await page.waitForTimeout(2000)
  const error = await page.evaluate(el => el.textContent, await page.$('#error'))
  if (error !== 'No errors detected...') {
    console.log(fname, error)
    return
  }
  await page.screenshot({ path: fname, clip: { x: 2000, y: 112, width: 2000, height: 2000 } })
  await page.close()
}

const processFile = async () => {
  const records = []
  const parser = createReadStream('./projeto.csv')
    .pipe(parse({
      from_line: 2
    }))

  const server = http.createServer((req, res) => serveHandler(req, res, {
    public: '../' // folder of files to serve
  })).listen(8080)

  const browser = await puppeteer.launch({ defaultViewport: { width: 4000, height: 2000 } })

  for await (const record of parser) {
    await createUML(browser, record[1], record[0] + '.png')
  }

  await browser.close()
  server.close()
  return records
}

processFile()