Wordpress - Get post ID from wp_insert_post()

Check the documentation:

Return: (int|WP_Error) The post ID on success. The value 0 or WP_Error on failure.

Thus:

$result = wp_insert_post( $data );

if ( $result && ! is_wp_error( $result ) ) {
    $post_id = $result;
    // Do something else
}

You'll have to do this in two steps. First, you will create a post in the draft mode, using wp_insert_post(). The wp_insert_post itself will return to you the ID of the inserted post:

<?php
$new_post = array(
    'post_title' => 'Draft title',
    'post_status'   => 'draft'
    'post_type'     =>      'my_custom_type'
);
$postId = wp_insert_post($new_post);
?>

<form method="post" action="your-action.php">
    <p>Hey! You are creating the post #<?php echo $postId; ?></p>
    <input type="hidden" name="draft_id" value="<?php echo $postId; ?>">
    ...
</form>

After that, in the action page, you will get the draft id and update the post. You'll use wp_update_post informing the draft ID.

<?php
$draftId = $_POST['draft_id'];
...

$updated_post = array(
    'ID'            =>      $draftId,
    'post_title'    =>      $title,
    ...
    'post_status'   =>      'publish', // Now it's public
    'post_type'     =>      'my_custom_type'
);
wp_update_post($updated_post);
?>

Hope it helps :)