package ru.zetit.bridgeandjoins.crypto;

import ru.zetit.bridgeandjoins.crypto.v1.ShutdownRequest;
import ru.zetit.bridgeandjoins.crypto.v1.ShutdownResponse;

import java.util.logging.Logger;

/**
 * Хендлер Shutdown: формирует ответ, затем (с короткой задержкой,
 * чтобы клиент успел получить ответ) вызывает System.exit(2). systemd
 * с Restart=on-failure поднимает сайдкар обратно через RestartSec.
 */
public final class ShutdownHandler {

    private static final Logger LOG = Logger.getLogger(ShutdownHandler.class.getName());

    public ShutdownResponse handle(ShutdownRequest request) {
        LOG.info("Shutdown: получен запрос, exit(2) через 500мс");
        // Поток-смертник: даёт gRPC завершить ответ клиенту, затем
        // valle exit с ненулевым кодом → systemd считает это failure
        // и перезапускает.
        Thread reaper = new Thread(() -> {
            try {
                Thread.sleep(500);
            } catch (InterruptedException ignore) {
            }
            System.exit(2);
        }, "bj-crypto-reaper");
        reaper.setDaemon(true);
        reaper.start();
        return ShutdownResponse.newBuilder().setOk(true).build();
    }
}
