<?php

namespace App\Services\Providers\Contracts;

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

    /**
     * @param  array<string, mixed>  $meta
     */
    public static function ok(string $status = 'connected', string $healthStatus = 'ok', array $meta = []): self
    {
        return new self(true, $status, $healthStatus, null, null, $meta);
    }

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