// @ts-check
import settings from '@overleaf/settings'
import recurly from 'recurly'

const ADD_ON_CODE = process.argv[2]

async function main() {
  if (!ADD_ON_CODE) {
    console.error('Missing add-on code')
    console.error(
      'Usage: node scripts/recurly/generate_addon_prices.mjs ADD_ON_CODE'
    )
    process.exit(1)
  }

  const localizedAddOnsPricing = {}

  const monthlyPlan = await getPlan(ADD_ON_CODE)
  if (monthlyPlan == null) {
    console.error(`Monthly plan missing in Recurly: ${ADD_ON_CODE}`)
    process.exit(1)
  }
  for (const { currency, unitAmount } of monthlyPlan.currencies ?? []) {
    if (!localizedAddOnsPricing[currency]) {
      localizedAddOnsPricing[currency] = { [ADD_ON_CODE]: {} }
    }
    localizedAddOnsPricing[currency][ADD_ON_CODE].monthly = unitAmount
  }

  const annualPlan = await getPlan(`${ADD_ON_CODE}-annual`)
  if (annualPlan == null) {
    console.error(`Annual plan missing in Recurly: ${ADD_ON_CODE}-annual`)
    process.exit(1)
  }
  for (const { currency, unitAmount } of annualPlan.currencies ?? []) {
    if (!localizedAddOnsPricing[currency]) {
      localizedAddOnsPricing[currency] = { [ADD_ON_CODE]: {} }
    }
    localizedAddOnsPricing[currency][ADD_ON_CODE].annual = unitAmount
  }

  console.log(JSON.stringify({ localizedAddOnsPricing }, null, 2))
}

/**
 * Get a plan configuration from Recurly
 *
 * @param {string} planCode
 */
async function getPlan(planCode) {
  const recurlyClient = new recurly.Client(settings.apis.recurly.apiKey)
  return await recurlyClient.getPlan(`code-${planCode}`)
}

await main()
