/**
 * Checks if a file is at its download limit
 *
 * This limit refers to the maximum number of times files connected to a product
 * can be downloaded.
 *
 * @since 1.3.1
 * @uses EDD_Logging::get_log_count()
 * @param int $download_id Download ID
 * @param int $payment_id Payment ID
 * @param int $file_id File ID
 * @param int $price_id Price ID
 * @return bool True if at limit, false otherwise
 */
function edd_is_file_at_download_limit($download_id = 0, $payment_id = 0, $file_id = 0, $price_id = false)
{
    // Checks to see if at limit
    $logs = new EDD_Logging();
    $meta_query = array('relation' => 'AND', array('key' => '_edd_log_file_id', 'value' => (int) $file_id), array('key' => '_edd_log_payment_id', 'value' => (int) $payment_id), array('key' => '_edd_log_price_id', 'value' => (int) $price_id));
    $ret = false;
    $download_count = $logs->get_log_count($download_id, 'file_download', $meta_query);
    $download_limit = edd_get_file_download_limit($download_id);
    $unlimited_purchase = edd_payment_has_unlimited_downloads($payment_id);
    if (!empty($download_limit) && empty($unlimited_purchase)) {
        if ($download_count >= $download_limit) {
            $ret = true;
            // Check to make sure the limit isn't overwritten
            // A limit is overwritten when purchase receipt is resent
            $limit_override = edd_get_file_download_limit_override($download_id, $payment_id);
            if (!empty($limit_override) && $download_count < $limit_override) {
                $ret = false;
            }
        }
    }
    return (bool) apply_filters('edd_is_file_at_download_limit', $ret, $download_id, $payment_id, $file_id);
}