package ru.zetit.bridgeandjoins.crypto;

import ru.zetit.bridgeandjoins.crypto.v1.VerifyRequest;
import ru.zetit.bridgeandjoins.crypto.v1.VerifyResponse;

/**
 * Хендлер проверки XMLDSig-подписи. На M1 — заглушка, возвращающая
 * valid=false с пояснением. Реальная реализация (Apache Santuario +
 * КриптоПро JCP) подключается, когда лицензия JCP станет доступна.
 */
public final class VerifyHandler {

    private final KeystoreProvider keystore;

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

    public VerifyResponse handle(VerifyRequest request) {
        // TODO(M2): реальная реализация через Apache Santuario.
        //
        // Шаги при подключении КриптоПро JCP:
        //  1. Парсим XML, ищем элемент <Signature>.
        //  2. Канонизуем по xml-exc-c14n.
        //  3. Берём сертификат из KeyInfo, проверяем цепочку через
        //     trust store профиля.
        //  4. Проверяем подпись (alg=GOST34112012-256/-512).
        //  5. Извлекаем CN, ИНН из subject.
        //
        // Сейчас — заглушка.

        return VerifyResponse.newBuilder()
                .setValid(false)
                .addErrors("crypto-service: VerifyXMLDSig stub — провайдер " + keystore.name()
                        + " не подключён (ждём PR-6/M2 КриптоПро JCP)")
                .build();
    }
}
