package ru.zetit.bridgeandjoins.crypto;

import ru.zetit.bridgeandjoins.crypto.v1.HealthRequest;
import ru.zetit.bridgeandjoins.crypto.v1.HealthResponse;

/**
 * Хендлер Health: возвращает статус провайдера КЗИ.
 *  - ok=true, если провайдер успешно инициализирован (или работает в stub);
 *  - provider — "validata" или "stub";
 *  - version — версия crypto-service.
 *
 * В крайнем правом окне UI bj-server этот ответ читается через cryptocli
 * и показывается в /admin/setup → СКЗИ.
 */
public final class HealthHandler {

    private static final String VERSION = "0.1.0";

    private final KeystoreProvider keystore;

    public HealthHandler(KeystoreProvider keystore) {
        this.keystore = keystore;
    }

    public HealthResponse handle(HealthRequest request) {
        // ok=true даже для stub — gRPC-сервис жив; реальная готовность
        // криптографии видна по полю provider (stub ↔ криптография не
        // подключена). Это упрощает /healthz: «UDS живой» — отдельный
        // факт от «есть рабочий ключ».
        return HealthResponse.newBuilder()
                .setOk(true)
                .setVersion(VERSION + " (" + keystore.message() + ")")
                .setProvider(keystore.name())
                .build();
    }
}
