package ca.metalogic.construction.listener;

import java.util.ArrayList;
import java.util.List;

import org.nuxeo.ecm.core.api.ClientException;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.core.api.IdRef;
import org.nuxeo.ecm.core.api.PathRef;
import org.nuxeo.ecm.core.event.Event;
import org.nuxeo.ecm.core.event.EventBundle;
import org.nuxeo.ecm.core.event.EventContext;
import org.nuxeo.ecm.core.event.PostCommitEventListener;
import org.nuxeo.ecm.core.event.impl.DocumentEventContext;
import org.nuxeo.ecm.platform.relations.api.QNameResource;
import org.nuxeo.ecm.platform.relations.api.RelationManager;
import org.nuxeo.ecm.platform.relations.api.Statement;
import org.nuxeo.ecm.platform.relations.api.impl.StatementImpl;
import org.nuxeo.runtime.api.Framework;

public class PublishListenerV1 implements PostCommitEventListener {
    
    protected static final String DOCUMENT_NAMESPACE = "http://www.nuxeo.org/document/uid/";
    protected static final String DOCUMENT_ROOT = "/default-domain/sections/construction";

    public void handleEvent(EventBundle events) throws ClientException {

        // only interested in new documents that are created - ignore all other events
        for (Event event : events) 
        {
            if ("documentCreated".equals(event.getName())) {
                handlePublish(event);
            }
        }
    }

    protected void handlePublish(Event event) throws ClientException {

        EventContext ctx = event.getContext();
        
        try {
            if (ctx instanceof DocumentEventContext) {
                DocumentEventContext docCtx = (DocumentEventContext) ctx;
                DocumentModel sourceDoc = docCtx.getSourceDocument();

                // only publish non-proxied ChallengePost and ResponsePost documents
                // publishing takes place to a static path
                if (!sourceDoc.isProxy() && 
                        ("ChallengePost".equals(sourceDoc.getDocumentType().getName()) || 
                                "ResponsePost".equals(sourceDoc.getDocumentType().getName()))) {
                    DocumentModel targetDoc = docCtx.getCoreSession().getDocument(new PathRef(DOCUMENT_ROOT));
                    DocumentModel proxy = docCtx.getCoreSession().publishDocument(sourceDoc, targetDoc);
                } 
            }
        } catch (Exception e) {

        } finally {
            ctx = null;
        }

    }
}
