package org.wikiwebserver.distribute.se.worker.task;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.wikiwebserver.distribute.interfaces.Generator;
import org.wikiwebserver.distribute.interfaces.Task;
import org.wikiwebserver.distribute.se.ConfigManager;

public class ImagePreviewTask extends Task implements Generator {
    
    public static final String[] IMAGE_EXTS = { "jpg", "jpeg", "jpe", "gif", "bmp", "png" };    

	private static final long serialVersionUID = 1L;

	private File dir = null;
	private int offset;
	private byte[] resizedImageData = null;
	
	public Object generate() throws IOException {

	    int idx = getTaskInputMeta().indexOf('|');
	    offset = Integer.parseInt(getTaskInputMeta().substring(0, idx));
	    String path = getTaskInputMeta().substring(idx+1);
	    
	    dir = ConfigManager.getFileForPath(path);
		if (!dir.exists()) {
			throw new FileNotFoundException(dir.getPath());
		}		
		
        if (!dir.isDirectory()) {
            throw new IOException("Directory expected:" + dir.getPath());
        }   		
		

        // Step over each file until image at specified offset is found
        int position = 0;
        File file = null;
        for (File currentFile : dir.listFiles()) {
            for (String ext : IMAGE_EXTS) {
                if (currentFile.getName().toLowerCase().endsWith(ext)) {
                    position++;
                    file = currentFile;
                    break;
                }
            }
            if (position > offset) {
                break;
            }
        }       
		
        BufferedImage scaledImage = ImagePostTask.getScaledImage(file, 710);        

        resizedImageData = ImagePostTask.getBytes(scaledImage);
        
        setTaskOutputMeta(String.valueOf(getStreamLength()));        
        
        return resizedImageData;
	}
	
    public long getStreamLength() {
        return resizedImageData.length;
    }   
    
    public String toString() {
        if (dir == null) return "Starting...";
        return "Posting preview image " + dir + " [" + offset + "]" ;
    }       
}

