<?php

declare(strict_types=1);

namespace Kreait\Firebase\Auth;

use Beste\Json;
use Psr\Http\Message\ResponseInterface;

use function count;
use function is_countable;

final class DeleteUsersResult
{
    /**
     * @param array{
     *     index: int,
     *     localId: string,
     *     message: string
     * } $rawErrors
     */
    private function __construct(
        private readonly int $successCount,
        private readonly int $failureCount,
        private readonly array $rawErrors,
    ) {
    }

    /**
     * @internal
     */
    public static function fromRequestAndResponse(DeleteUsersRequest $request, ResponseInterface $response): self
    {
        $data = Json::decode((string) $response->getBody(), true);
        $errors = $data['errors'] ?? [];

        $failureCount = is_countable($errors) ? count($errors) : 0;
        $successCount = count($request->uids()) - $failureCount;

        return new self($successCount, $failureCount, $errors);
    }

    public function failureCount(): int
    {
        return $this->failureCount;
    }

    public function successCount(): int
    {
        return $this->successCount;
    }

    /**
     * @return array{
     *                index: int,
     *                localId: string,
     *                message: string
     *                }
     */
    public function rawErrors(): array
    {
        return $this->rawErrors;
    }
}
