///|
pub fn product_name() -> String {
  "moonfish"
}

///|
pub fn prepare_product_status() -> @product.MoonfishProductStatus {
  @product.prepare_moonfish_product_status()
}

///|
pub fn prepare_product_launch_manifest() -> @product.ProductLaunchManifest {
  @product.prepare_product_launch_manifest(prepare_product_status())
}

///|
pub fn prepare_product_rehearsal_report() -> @product.ProductRehearsalReport {
  @product.prepare_product_rehearsal_report(prepare_product_status())
}

///|
pub fn prepare_release_certificate() -> @release.ReleaseCertificate {
  let status = prepare_product_status()
  @release.prepare_release_certificate(
    @release.release_certificate_input(
      status,
      @product.prepare_product_rehearsal_report(status),
    ),
  )
}

///|
pub fn prepare_rollback_window_report() -> @rollback.RollbackWindowReport {
  let status = prepare_product_status()
  let rehearsal = @product.prepare_product_rehearsal_report(status)
  let certificate = @release.prepare_release_certificate(
    @release.release_certificate_input(status, rehearsal),
  )
  @rollback.prepare_rollback_window_report(
    @rollback.rollback_window_input(status, certificate),
  )
}

///|
pub fn prepare_operations_readiness_report() -> @operations.OperationsReadinessReport {
  let status = prepare_product_status()
  let rehearsal = @product.prepare_product_rehearsal_report(status)
  let certificate = @release.prepare_release_certificate(
    @release.release_certificate_input(status, rehearsal),
  )
  let rollback = @rollback.prepare_rollback_window_report(
    @rollback.rollback_window_input(status, certificate),
  )
  @operations.prepare_operations_readiness_report(
    @operations.operations_report_input(status, certificate, rollback),
  )
}