package eu.dnetlib.social.consumer;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.simple.JSONObject;

import com.google.gdata.client.media.ResumableGDataFileUploader;
import com.google.gdata.client.youtube.YouTubeService;

import eu.dnetlib.social.YouTubeObject;

/**
 * @author alessia
 * 
 */
public class YouTubeSocialDequeuer {

	private static final Log log = LogFactory.getLog(YouTubeSocialDequeuer.class);
	//private YouTubeService youTubeService;
	private String targetDir;
	private SocialProgressListener progressListener;
	//time interval to check progress status
	public static int SLEEP_TIME = 1000;

	public static void run(final JSONObject task) {
		log.debug("Got task --> " + task);
		try {
			YouTubeObject o = new YouTubeObject(task);
			YouTubeService service = new YouTubeService("HopeTest",
					"AI39si5aCNWJ8yMSD0HpH9fv917DWxZLR-9GCpCxGEDLB8UHSpHnuFxJTbdqJixJze0doIJylCz9oDMlflVtO-nZCvgsXlk2YQ");
			YouTubeSocialDequeuer dequeuer = new YouTubeSocialDequeuer();
			dequeuer.setTargetDir("/tmp");
			log.info("Download directory is " + dequeuer.getTargetDir());
			SocialProgressListener listener = new YouTubeLogProgressListener();
			dequeuer.setProgressListener(listener);
			YouTubePublisher publisher = new YouTubePublisher();
			publisher.setYouTubeService(service);
			publisher.setTargetDir(dequeuer.getTargetDir());
			publisher.setProgressListener(dequeuer.getProgressListener());
			publisher.publish(o.getUserName(), o.getPassword(), o);
			ResumableGDataFileUploader uploader = publisher.getUploader();
			while (!dequeuer.getProgressListener().isDone(uploader)) {
				Thread.sleep(SLEEP_TIME);
			}
			log.debug("Current status for file: " + o.getPID());
			log.debug(">> status: " + dequeuer.getProgressListener().getStatus(uploader));
			log.debug(">> progress: " + dequeuer.getProgressListener().getProgressPercentage(uploader));
			log.debug(">> YouTube URL: " + dequeuer.getProgressListener().getSocialURL(uploader));
			log.debug("Executed task --> " + task);
			//TODO: check publishing
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public String getTargetDir() {
		return targetDir;
	}

	public void setTargetDir(final String targetDir) {
		this.targetDir = targetDir;
	}

	public SocialProgressListener getProgressListener() {
		return progressListener;
	}

	public void setProgressListener(final SocialProgressListener progressListener) {
		this.progressListener = progressListener;
	}
}
