<?php

namespace ZOOlanders\YOOessentials\Vendor\AsyncAws\Core\AwsError;

use ZOOlanders\YOOessentials\Vendor\AsyncAws\Core\Exception\UnexpectedValue;
use ZOOlanders\YOOessentials\Vendor\AsyncAws\Core\Exception\UnparsableResponse;
final class JsonRpcAwsErrorFactory implements AwsErrorFactoryInterface
{
    use AwsErrorFactoryFromResponseTrait;
    public function createFromContent(string $content, array $headers) : AwsError
    {
        try {
            $body = \json_decode($content, \true);
            return self::parseJson($body, $headers);
        } catch (\Throwable $e) {
            throw new UnparsableResponse('Failed to parse AWS error: ' . $content, 0, $e);
        }
    }
    /**
     * @param array<string, mixed>        $body
     * @param array<string, list<string>> $headers
     */
    private static function parseJson(array $body, array $headers) : AwsError
    {
        $code = null;
        $message = $body['message'] ?? $body['Message'] ?? null;
        if (isset($body['__type'])) {
            $parts = \explode('#', $body['__type'], 2);
            $code = $parts[1] ?? $parts[0];
        }
        if (null !== $code || null !== $message) {
            return new AwsError($code, $message, null, null);
        }
        throw new UnexpectedValue('JSON does not contains AWS Error');
    }
}
