/**
 * 
 */
package mkl.testarea.itext5.merge;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;

import org.junit.BeforeClass;
import org.junit.Test;

import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
import com.itextpdf.text.pdf.parser.RenderListener;

/**
 * Test of {@link PageVerticalAnalyzer} {@link RenderListener}
 * 
 * @author mkl
 */
public class PageVerticalAnalysis
{
    final static File RESULT_FOLDER = new File("target/test-outputs/merge");

    @BeforeClass
    public static void setUpBeforeClass() throws Exception
    {
        RESULT_FOLDER.mkdirs();
    }

    @Test
    public void test() throws IOException
    {
        String[] pdfs = new String[]{"Header.pdf", "Body.pdf", "Footer.pdf", "from.pdf", "preface.pdf", "Test_Type3_Problem.pdf", "testA4.pdf"};
        for (String pdf: pdfs)
        {
            try (   InputStream resource = getClass().getResourceAsStream(pdf))
            {
                File target = new File(RESULT_FOLDER, pdf + "-sections.txt");
                analyzeVertically(resource, target);
            }
        }
    }

    void analyzeVertically(InputStream pdf, File target) throws IOException
    {
        final PdfReader reader = new PdfReader(pdf);

        try 
        {
            PdfReaderContentParser parser = new PdfReaderContentParser(reader);
            StringBuilder builder = new StringBuilder();
            for (int page=1; page <= reader.getNumberOfPages(); page++)
            {
                PageVerticalAnalyzer analyzer = parser.processContent(page, new PageVerticalAnalyzer());
                builder.append("Page ").append(page).append('\n');
                if (analyzer.verticalFlips.size() > 0)
                {
                    for (int i = 0; i < analyzer.verticalFlips.size() - 1; i+=2)
                    {
                        builder.append(String.format("%3.3f - %3.3f\n", analyzer.verticalFlips.get(i), analyzer.verticalFlips.get(i+1)));
                    }
                    builder.append('\n');
                }
                else
                {
                    builder.append("No content\n\n");
                }
            }
            String sections = builder.toString();
            System.out.print(sections);
            Files.write(target.toPath(), sections.getBytes());
        }
        finally
        {
            reader.close();
        }
    }
}