package ru.zetit.bridgeandjoins.crypto;

import ru.zetit.bridgeandjoins.crypto.v1.ActivateRequest;
import ru.zetit.bridgeandjoins.crypto.v1.ActivateResponse;

import java.util.logging.Logger;

/**
 * Хендлер Activate: переключает текущий провайдер на указанный
 * профиль pki1.conf без рестарта сайдкара. Если провайдер не
 * {@link ValidataProvider} (например stub) — отказ.
 */
public final class ActivateHandler {

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

    private final KeystoreProvider keystore;

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

    public ActivateResponse handle(ActivateRequest request) {
        String profile = request.getProfile();
        if (!(keystore instanceof ValidataProvider vp)) {
            return ActivateResponse.newBuilder()
                    .setOk(false)
                    .setProvider(keystore.name())
                    .setMessage("crypto-service запущен с провайдером " + keystore.name()
                            + " — переключение профиля доступно только для validata")
                    .build();
        }
        boolean ok = vp.reinit(profile);
        LOG.info("Activate: profile=\"" + profile + "\", ok=" + ok + ", msg=" + vp.message());
        return ActivateResponse.newBuilder()
                .setOk(ok)
                .setProvider(vp.name())
                .setProfile(profile == null ? "" : profile)
                .setMessage(vp.message())
                .build();
    }
}
