<?php

declare(strict_types=1);

namespace App\Framework\HttpClient\Curl;

/**
 * Type-safe enum for cURL info constants (CURLINFO_*)
 *
 * Used with Handle::getInfo() to retrieve request/response information
 */
enum Info: int
{
    case EffectiveUrl = CURLINFO_EFFECTIVE_URL;
    case ResponseCode = CURLINFO_RESPONSE_CODE; // Note: CURLINFO_HTTP_CODE is an alias
    case TotalTime = CURLINFO_TOTAL_TIME;
    case TotalTimeT = CURLINFO_TOTAL_TIME_T;
    case NameLookupTime = CURLINFO_NAMELOOKUP_TIME;
    case NameLookupTimeT = CURLINFO_NAMELOOKUP_TIME_T;
    case ConnectTime = CURLINFO_CONNECT_TIME;
    case ConnectTimeT = CURLINFO_CONNECT_TIME_T;
    case PreTransferTime = CURLINFO_PRETRANSFER_TIME;
    case PreTransferTimeT = CURLINFO_PRETRANSFER_TIME_T;
    case SizeUpload = CURLINFO_SIZE_UPLOAD;
    case SizeUploadT = CURLINFO_SIZE_UPLOAD_T;
    case SizeDownload = CURLINFO_SIZE_DOWNLOAD;
    case SizeDownloadT = CURLINFO_SIZE_DOWNLOAD_T;
    case SpeedDownload = CURLINFO_SPEED_DOWNLOAD;
    case SpeedDownloadT = CURLINFO_SPEED_DOWNLOAD_T;
    case SpeedUpload = CURLINFO_SPEED_UPLOAD;
    case SpeedUploadT = CURLINFO_SPEED_UPLOAD_T;
    case HeaderSize = CURLINFO_HEADER_SIZE;
    case RequestSize = CURLINFO_REQUEST_SIZE;
    case SslVerifyResult = CURLINFO_SSL_VERIFYRESULT;
    case Filetime = CURLINFO_FILETIME;
    case FiletimeT = CURLINFO_FILETIME_T;
    case ContentLengthDownload = CURLINFO_CONTENT_LENGTH_DOWNLOAD;
    case ContentLengthDownloadT = CURLINFO_CONTENT_LENGTH_DOWNLOAD_T;
    case ContentLengthUpload = CURLINFO_CONTENT_LENGTH_UPLOAD;
    case ContentLengthUploadT = CURLINFO_CONTENT_LENGTH_UPLOAD_T;
    case StartTransferTime = CURLINFO_STARTTRANSFER_TIME;
    case StartTransferTimeT = CURLINFO_STARTTRANSFER_TIME_T;
    case ContentType = CURLINFO_CONTENT_TYPE;
    case RedirectTime = CURLINFO_REDIRECT_TIME;
    case RedirectTimeT = CURLINFO_REDIRECT_TIME_T;
    case RedirectCount = CURLINFO_REDIRECT_COUNT;
    case RedirectUrl = CURLINFO_REDIRECT_URL;
    case Private = CURLINFO_PRIVATE;
    case HttpConnectCode = CURLINFO_HTTP_CONNECTCODE;
    case HttpAuthAvail = CURLINFO_HTTPAUTH_AVAIL;
    case ProxyAuthAvail = CURLINFO_PROXYAUTH_AVAIL;
    case OsErrno = CURLINFO_OS_ERRNO;
    case NumConnects = CURLINFO_NUM_CONNECTS;
    case SslEngines = CURLINFO_SSL_ENGINES;
    case CookieList = CURLINFO_COOKIELIST;
    case FtpEntryPath = CURLINFO_FTP_ENTRY_PATH;
    case AppConnectTime = CURLINFO_APPCONNECT_TIME;
    case AppConnectTimeT = CURLINFO_APPCONNECT_TIME_T;
    case CertInfo = CURLINFO_CERTINFO;
    case ConditionUnmet = CURLINFO_CONDITION_UNMET;
    case RtspSessionId = CURLINFO_RTSP_SESSION_ID;
    case RtspClientCseq = CURLINFO_RTSP_CLIENT_CSEQ;
    case RtspServerCseq = CURLINFO_RTSP_SERVER_CSEQ;
    case RtspCseqRecv = CURLINFO_RTSP_CSEQ_RECV;
    case PrimaryIp = CURLINFO_PRIMARY_IP;
    case PrimaryPort = CURLINFO_PRIMARY_PORT;
    case LocalIp = CURLINFO_LOCAL_IP;
    case LocalPort = CURLINFO_LOCAL_PORT;
    case Scheme = CURLINFO_SCHEME;
    case Protocol = CURLINFO_PROTOCOL;
    case ProxySslVerifyResult = CURLINFO_PROXY_SSL_VERIFYRESULT;
}
