package com.fitbank.pdfmerger;

import java.awt.Component;
import java.io.File;
import java.io.FileFilter;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JFileChooser;

/**
 *
 * @author FitBank CI
 */
public class FilePageSourceProvider implements PageSourceProvider {

    private final Component parent;

    private final JFileChooser fileChooser;

    public FilePageSourceProvider(Component parent, JFileChooser fileChooser) {
        this.parent = parent;
        this.fileChooser = fileChooser;
    }

    public List<? extends PageSource> getPageSources() {
        List<PageSource> res = new LinkedList<PageSource>();

        if (fileChooser.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) {
            readFiles(fileChooser.getSelectedFiles(), res);
        }

        return res;
    }

    private void readFiles(File[] files, List<PageSource> res) {
        for (File file : files) {
            String fileName = file.getName().toLowerCase();

            if (file.isDirectory()) {
                readFiles(file.listFiles(new FileFilter() {

                    public boolean accept(File pathname) {
                        return pathname.isFile();
                    }

                }), res);
            } else if (fileName.matches(".*\\.pdf$")) {
                res.addAll(PdfPageSource.getPageSources(file));
            } else if (fileName.matches(".*\\.tiff?$")) {
                res.addAll(TiffPageSource.getPageSources(file));
            } else {
                res.add(new FilePageSource(file));
            }
        }
    }

    @Override
    public String toString() {
        return "Archivo";
    }

}
