package ru.zetit.bridgeandjoins.crypto;

import com.google.protobuf.ByteString;
import io.grpc.Status;
import io.grpc.StatusRuntimeException;
import ru.zetit.bridgeandjoins.crypto.v1.SignRequest;
import ru.zetit.bridgeandjoins.crypto.v1.SignResponse;

/**
 * Хендлер подписи XML. На M1 — заглушка, возвращает UNIMPLEMENTED.
 * Реальная реализация подключается, когда лицензия КриптоПро JCP
 * будет доступна.
 */
public final class SignHandler {

    private final KeystoreProvider keystore;

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

    public SignResponse handle(SignRequest request) {
        // TODO(M2): реальная реализация:
        //  1. Загружаем ключ по key_alias из keystore (через KeystoreProvider).
        //  2. Канонизуем payload по xml-exc-c14n.
        //  3. Создаём <Signature> элемент через Santuario с GOST-алгоритмом.
        //  4. Возвращаем signed_xml.
        //
        // Сейчас — заглушка.

        throw new StatusRuntimeException(Status.UNIMPLEMENTED
                .withDescription("crypto-service: SignXMLDSig stub — провайдер "
                        + keystore.name() + " не подключён (ждём PR-6/M2 КриптоПро JCP)"));
    }

    @SuppressWarnings("unused")
    private SignResponse empty() {
        return SignResponse.newBuilder().setSignedXml(ByteString.EMPTY).build();
    }
}
