<?php

declare(strict_types=1);

namespace App\Uploads\Services;

final class InspectionResult
{
    /**
     * @param array{files:int,depth:int,size:int,ratio:float} $stats
     */
    public function __construct(
        public readonly bool $valid,
        public readonly ?string $reason,
        public readonly array $stats,
    ) {
    }

    /**
     * @param array{files:int,depth:int,size:int,ratio:float} $stats
     */
    public static function pass(array $stats): self
    {
        return new self(true, null, $stats);
    }

    /**
     * @param array{files:int,depth:int,size:int,ratio:float} $stats
     */
    public static function fail(string $reason, array $stats): self
    {
        return new self(false, $reason, $stats);
    }

    /**
     * @return array{valid:bool,reason:?string,stats:array{files:int,depth:int,size:int,ratio:float}}
     */
    public function toArray(): array
    {
        return [
            'valid' => $this->valid,
            'reason' => $this->reason,
            'stats' => $this->stats,
        ];
    }
}
