<?php

declare (strict_types=1);
/*
 * PaypalServerSdkLib
 *
 * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
 */
namespace FormGent\PaypalServerSdkLib\Utils;

use FormGent\CoreInterfaces\Core\ContextInterface;
use FormGent\CoreInterfaces\Core\Request\RequestInterface;
use FormGent\CoreInterfaces\Core\Response\ResponseInterface;
use FormGent\CoreInterfaces\Sdk\ConverterInterface;
use FormGent\PaypalServerSdkLib\Exceptions\ApiException;
use FormGent\PaypalServerSdkLib\Http\ApiResponse;
use FormGent\PaypalServerSdkLib\Http\HttpContext;
use FormGent\PaypalServerSdkLib\Http\HttpRequest;
use FormGent\PaypalServerSdkLib\Http\HttpResponse;
class CompatibilityConverter implements ConverterInterface
{
    public function createApiException(string $message, RequestInterface $request, ?ResponseInterface $response) : ApiException
    {
        $response = $response == null ? null : $this->createHttpResponse($response);
        return new ApiException($message, $this->createHttpRequest($request), $response);
    }
    public function createHttpContext(ContextInterface $context) : HttpContext
    {
        return new HttpContext($this->createHttpRequest($context->getRequest()), $this->createHttpResponse($context->getResponse()));
    }
    public function createHttpRequest(RequestInterface $request) : HttpRequest
    {
        return new HttpRequest($request->getHttpMethod(), $request->getHeaders(), $request->getQueryUrl(), $request->getParameters());
    }
    public function createHttpResponse(ResponseInterface $response) : HttpResponse
    {
        return new HttpResponse($response->getStatusCode(), $response->getHeaders(), $response->getRawBody());
    }
    public function createApiResponse(ContextInterface $context, $deserializedBody) : ApiResponse
    {
        return ApiResponse::createFromContext($context->getResponse()->getBody(), $deserializedBody, $this->createHttpContext($context));
    }
    public function createFileWrapper(string $realFilePath, ?string $mimeType, ?string $filename)
    {
        return null;
    }
}
