package com.srbenoit.media.movie;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import javax.imageio.ImageIO;
import javax.media.MediaLocator;
import com.srbenoit.log.LoggedObject;

/**
 * Class to convert a series of frame files into a movie.
 */
public final class BuildMovie extends LoggedObject {

    /**
     * Private constructor to prevent instantiation.
     */
    private BuildMovie() {

        super();
    }

    /**
     * Main method to run the conversion.
     *
     * @param  args  command-line arguments
     */
    public static void main(final String... args) {

        String fname;
        File file;
        MakeMovie maker;
        List<BufferedImage> images;
        BufferedImage img;
        MediaLocator loc;

        images = new ArrayList<BufferedImage>(1000);

        for (int i = 1; i < 999999; i++) {

            if ((i % 100) == 1) {
                LOG.finest(".");
            }

            fname = "/imp/frames/frame_" + Integer.toString(i / 1000)
                + Integer.toString((i / 100) % 10) + Integer.toString((i / 10) % 10)
                + Integer.toString(i % 10) + ".png";
            file = new File(fname); // NOPMD SRB

            if (file.exists()) {

                try {
                    img = ImageIO.read(file);
                } catch (IOException ex) {
                    LOG.log(Level.WARNING, "Exception reading file " + file.getAbsolutePath(), ex);

                    break;
                }

                if (img == null) {
                    break;
                }

                images.add(img);
            } else {
                break;
            }
        }

        if (images.isEmpty()) {
            LOG.info("No files to process");
        } else {
            LOG.log(Level.INFO, "Processing {0}", images.size());
            maker = new MakeMovie();
            loc = MakeMovie.createMediaLocator("file:/imp/cell_with_fixed_attractant.mov");

            try {
                maker.doItBuffered(800, 600, 24, images, loc);
            } catch (MovieMakingException e) {
                LOG.log(Level.WARNING, "Exception building movie", e);
            }
        }
    }
}
