import { chalk, logger, type PackageJson, readJson, sleep } from '@eljs/utils'
import path from 'node:path'
import { $, argv } from 'zx'

$.verbose = true

main()
  .then(() => process.exit(0))
  .catch(error => {
    console.error(`add owner error: ${error.message}`)
    process.exit(1)
  })

async function main(): Promise<void> {
  const owners = argv._

  if (!owners.length) {
    logger.printErrorAndExit('please entry owner name.')
  }

  const { name: pkgName } = await readJson<PackageJson>(
    path.resolve(__dirname, '../package.json'),
  )

  for (const owner of owners) {
    try {
      await $`pnpm owner add ${owner} ${pkgName}`
      logger.ready(
        `User ${chalk.bold(owner)} now has the permission of ${pkgName}.`,
      )
    } catch (err) {
      await sleep(200)
      await $`npm cache clean --force`
    }
  }
}
