<?php

namespace Safe;

use Safe\Exceptions\ErrorfuncException;

/**
 * Sends an error message to the web server's error log or to a file.
 *
 * @param string $message The error message that should be logged.
 * @param int $message_type Says where the error should go. The possible message types are as
 * follows:
 *
 *
 * error_log log types
 *
 *
 *
 * 0
 *
 * message is sent to PHP's system logger, using
 * the Operating System's system logging mechanism or a file, depending
 * on what the error_log
 * configuration directive is set to.  This is the default option.
 *
 *
 *
 * 1
 *
 * message is sent by email to the address in
 * the destination parameter.  This is the only
 * message type where the fourth parameter,
 * extra_headers is used.
 *
 *
 *
 * 2
 *
 * No longer an option.
 *
 *
 *
 * 3
 *
 * message is appended to the file
 * destination. A newline is not automatically
 * added to the end of the message string.
 *
 *
 *
 * 4
 *
 * message is sent directly to the SAPI logging
 * handler.
 *
 *
 *
 *
 *
 * @param string $destination The destination. Its meaning depends on the
 * message_type parameter as described above.
 * @param string $extra_headers The extra headers. It's used when the message_type
 * parameter is set to 1.
 * This message type uses the same internal function as
 * mail does.
 * @throws ErrorfuncException
 *
 */
function error_log(string $message, int $message_type = 0, ?string $destination = null, ?string $extra_headers = null): void
{
    error_clear_last();
    if ($extra_headers !== null) {
        $result = \error_log($message, $message_type, $destination, $extra_headers);
    } elseif ($destination !== null) {
        $result = \error_log($message, $message_type, $destination);
    } else {
        $result = \error_log($message, $message_type);
    }
    if ($result === false) {
        throw ErrorfuncException::createFromPhpError();
    }
}
