import portscanner from 'portscanner'
import childProcess from 'child_process'
import path from 'path'
import { errorMain, warnMain } from '../utils/log'

const PORT = [1 << 15, (1 << 16) - 1]

export const findPort = () => {
  const [min, max] = PORT
  return portscanner.findAPortNotInUse(min, max, '127.0.0.1')
}

export const runService = () => {
  return findPort().then(n => {
    const filename =
      process.platform === 'win32' ? 'netease-api.exe' : 'netease-api'
    const port = String(n)
    const cwd = path.resolve(__dirname, '../../public/service')
    const service = childProcess.exec(filename, {
      cwd: cwd,
      env: {
        PORT: port
      }
    })
    service.on('error', err => {
      errorMain('cwd', cwd, '\nservice err:', err.toString())
    })
    service.on('exit', (code, signal) => {
      warnMain('service exit', code, signal)
    })
    return {
      service,
      port
    }
  })
}