/**
 * Insert Payment
 *
 * @since 1.0
 * @param array $payment_data
 * @return int|bool Payment ID if payment is inserted, false otherwise
 */
function edd_insert_payment($payment_data = array())
{
    if (empty($payment_data)) {
        return false;
    }
    $payment = new EDD_Payment();
    if (is_array($payment_data['cart_details']) && !empty($payment_data['cart_details'])) {
        foreach ($payment_data['cart_details'] as $item) {
            $args = array('quantity' => $item['quantity'], 'price_id' => isset($item['item_number']['options']['price_id']) ? $item['item_number']['options']['price_id'] : null, 'tax' => $item['tax'], 'item_price' => isset($item['item_price']) ? $item['item_price'] : $item['price'], 'fees' => isset($item['fees']) ? $item['fees'] : array(), 'discount' => isset($item['discount']) ? $item['discount'] : 0);
            $options = isset($item['item_number']['options']) ? $item['item_number']['options'] : array();
            $payment->add_download($item['id'], $args, $options);
        }
    }
    $payment->increase_tax(edd_get_cart_fee_tax());
    $gateway = !empty($payment_data['gateway']) ? $payment_data['gateway'] : '';
    $gateway = empty($gateway) && isset($_POST['edd-gateway']) ? $_POST['edd-gateway'] : $gateway;
    $payment->status = !empty($payment_data['status']) ? $payment_data['status'] : 'pending';
    $payment->currency = !empty($payment_data['currency']) ? $payment_data['currency'] : edd_get_currency();
    $payment->user_info = $payment_data['user_info'];
    $payment->gateway = $gateway;
    $payment->user_id = $payment_data['user_info']['id'];
    $payment->email = $payment_data['user_email'];
    $payment->first_name = $payment_data['user_info']['first_name'];
    $payment->last_name = $payment_data['user_info']['last_name'];
    $payment->email = $payment_data['user_info']['email'];
    $payment->ip = edd_get_ip();
    $payment->key = $payment_data['purchase_key'];
    $payment->mode = edd_is_test_mode() ? 'test' : 'live';
    $payment->parent_payment = !empty($payment_data['parent']) ? absint($payment_data['parent']) : '';
    $payment->discounts = !empty($payment_data['user_info']['discount']) ? $payment_data['user_info']['discount'] : array();
    if (isset($payment_data['post_date'])) {
        $payment->date = $payment_data['post_date'];
    }
    if (edd_get_option('enable_sequential')) {
        $number = edd_get_next_payment_number();
        $payment->number = edd_format_payment_number($number);
        update_option('edd_last_payment_number', $number);
    }
    // Clear the user's purchased cache
    delete_transient('edd_user_' . $payment_data['user_info']['id'] . '_purchases');
    $payment->save();
    do_action('edd_insert_payment', $payment->ID, $payment_data);
    if (!empty($payment->ID)) {
        return $payment->ID;
    }
    // Return false if no payment was inserted
    return false;
}