import ServerlessError from '../../../serverless-error.js'

async function resolveCfRefValue(provider, resourceLogicalId, sdkParams = {}) {
  return provider
    .request(
      'CloudFormation',
      'listStackResources',
      Object.assign(sdkParams, { StackName: provider.naming.getStackName() }),
    )
    .then((result) => {
      const targetStackResource = result.StackResourceSummaries.find(
        (stackResource) =>
          stackResource.LogicalResourceId === resourceLogicalId,
      )
      if (targetStackResource) return targetStackResource.PhysicalResourceId
      if (result.NextToken) {
        return resolveCfRefValue(provider, resourceLogicalId, {
          NextToken: result.NextToken,
        })
      }

      throw new ServerlessError(
        `Could not resolve Ref with name ${resourceLogicalId}. Are you sure this value matches one resource logical ID ?`,
        'CF_REF_RESOLUTION',
      )
    })
}

export default resolveCfRefValue
