#!/usr/bin/env node -r esm

import consola from 'consola'

import Package from './package.js'

async function main() {
  // Read package at current directory
  const rootPackage = new Package()
  const workspacePackages = await rootPackage.getWorkspacePackages()

  const watch = process.argv.includes('--watch')

  if (watch) {
    consola.info('Watch mode')
  }

  // Universal linkedDependencies based on workspace
  const linkedDependencies = workspacePackages
    .map(p => p.pkg.name.replace(p.options.suffix, ''))

  for (const pkg of workspacePackages) {
    pkg.options.linkedDependencies = (pkg.options.linkedDependencies || [])
      .concat(linkedDependencies)
  }

  // Step 1: Apply suffixes
  for (const pkg of workspacePackages) {
    if (pkg.options.suffix && pkg.options.suffix.length) {
      await pkg.suffixAndVersion()
      await pkg.writePackage()
    }
  }

  // Step 2: Build packages
  for (const pkg of workspacePackages) {
    if (pkg.options.build) {
      if (watch) {
        pkg.watch()
      } else {
        await pkg.build()
      }
    }
  }

  // Step 3: Link dependencies and Fix packages
  for (const pkg of workspacePackages) {
    pkg.syncLinkedDependencies()
    pkg.autoFix()
    pkg.writePackage()
  }
}

main().catch((error) => {
  consola.error(error)
  process.exit(1)
})