package eu.dnetlib.r2d2;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Component;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;

public class ThumbnailGeneratorImpl implements ThumbnailGenerator {
	private static final Log log = LogFactory.getLog(ThumbnailGeneratorImpl.class); // NOPMD by marko on 11/24/08 5:02 PM

	@Resource(name = "mongoDB")
	private DB mongo;

	private DBCollection collection;

	private DBCollection queue;

	@PostConstruct
	public void init() {
		collection = mongo.getCollection("thumbnails");
		queue = mongo.getCollection("thumbnailsQueue");
		queue.ensureIndex(new BasicDBObject("id", 1));
		queue.ensureIndex(new BasicDBObject("timestamp", 1));
		queue.ensureIndex(new BasicDBObject("status", 1));
		
		if ("0".equals("1")) {
			if (mongo.getCollectionNames().contains("thumbnailsQueue")) {
				queue = mongo.getCollection("thumbnailsQueue");
			} else {
				DBObject params = new BasicDBObject();
				params.put("capped", true);
				params.put("size", 60000);
				queue = mongo.createCollection("thumbnailsQueue", params);
			}
		}
	}

	@Override
	public String thumbnailForItem(String id, String itemUrl) {

		DBObject found = collection.findOne(new BasicDBObject("id", id));
		if (found != null) {
			log.info("GOT THUMBNAIL: " + (String) found.get("url"));
			return (String) found.get("url");
		}

		final BasicDBObject obj = new BasicDBObject();
		obj.put("id", id);
		found = queue.findOne(obj);

		log.info("Searching queue for " + id);
		if (found == null) {
			log.info("Enqueing thumbnail " + id);
			
			obj.put("status", "new");
			obj.put("timestamp", System.currentTimeMillis());
			obj.put("url", itemUrl); 
			queue.insert(obj);
		} else {
			log.info("thumb already queued ignoring " + id);
		}

		return null;
	}

}
