<?php

namespace WPDesk\HttpClient\Curl;

use WPDesk\HttpClient\Curl\Exception\CurlException;
use WPDesk\HttpClient\Curl\Exception\CurlTimedOutException;

class CurlExceptionFactory
{
    /**
     * Convert curl code to appropriate exception class.
     *
     * @param int $curlCode Code from https://curl.haxx.se/libcurl/c/libcurl-errors.html
     * @param string $curlMessage
     * @return CurlException
     */
    public static function createCurlException($curlCode, $curlMessage) {
        switch ($curlCode) {
            case CURLE_OPERATION_TIMEDOUT:
                return new CurlTimedOutException($curlMessage, $curlCode);
            default:
                return self::createDefaultException($curlMessage, $curlCode);
        }
    }

    /**
     * Creates default Curl exception
     *
     * @param $code
     * @param $message
     * @param \Exception|null $prev
     * @return CurlException
     */
    public static function createDefaultException($code, $message, \Exception $prev = null) {
        return new CurlException('Default exception: ' . $message, $code, $prev);
    }
}