# SPDX-FileCopyrightText: 2022 James R. Barlow
# SPDX-License-Identifier: MPL-2.0

from __future__ import annotations

import logging

import pikepdf
import pytest

import ocrmypdf

from .conftest import check_ocrmypdf

# pylint: disable=redefined-outer-name


@pytest.fixture
def acroform(resources):
    return resources / 'acroform.pdf'


def test_acroform_and_redo(acroform, no_outpdf):
    with pytest.raises(
        ocrmypdf.exceptions.InputFileError,
        match=r'.*--redo-ocr.*is not currently possible.*',
    ):
        check_ocrmypdf(acroform, no_outpdf, '--redo-ocr')


def test_acroform_message(acroform, caplog, outpdf):
    caplog.set_level(logging.INFO)
    check_ocrmypdf(acroform, outpdf, '--plugin', 'tests/plugins/tesseract_noop.py')
    assert 'fillable form' in caplog.text
    assert '--force-ocr' in caplog.text


@pytest.fixture
def digitally_signed(acroform, outdir):
    out = outdir / 'acroform_signed.pdf'
    with pikepdf.open(acroform) as pdf:
        pdf.Root.AcroForm.SigFlags = 3
        pdf.save(out)
    yield out


def test_digital_signature(digitally_signed, no_outpdf):
    with pytest.raises(ocrmypdf.exceptions.DigitalSignatureError):
        check_ocrmypdf(digitally_signed, no_outpdf)


def test_digital_signature_invalidate(digitally_signed, no_outpdf):
    check_ocrmypdf(
        digitally_signed, no_outpdf, '--force-ocr', '--invalidate-digital-signatures'
    )
