<?php

namespace App\Services\Providers\Contracts;

use App\Support\Providers\ProviderVerificationStatus;

final class HealthResult
{
    /**
     * @param  array<string, mixed>  $meta
     */
    public function __construct(
        public readonly bool $healthy,
        public readonly string $verificationStatus,
        public readonly ?string $reasonCode = null,
        public readonly ?string $message = null,
        public readonly array $meta = [],
    ) {}

    /**
     * @param  array<string, mixed>  $meta
     */
    public static function ok(array $meta = []): self
    {
        return new self(true, ProviderVerificationStatus::Healthy->value, null, null, $meta);
    }

    /**
     * @param  array<string, mixed>  $meta
     */
    public static function failed(
        string $reasonCode,
        string $message,
        string $verificationStatus = 'error',
        array $meta = [],
    ): self {
        return new self(false, $verificationStatus, $reasonCode, $message, $meta);
    }
}
