package org.jbake.launcher;

import org.apache.commons.vfs2.FileChangeEvent;
import org.apache.commons.vfs2.FileListener;
import org.apache.commons.vfs2.FileObject;
import org.jbake.app.Oven;
import org.jbake.app.configuration.JBakeConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;

public class CustomFSChangeListener implements FileListener {

    private final static Logger LOGGER = LoggerFactory.getLogger(CustomFSChangeListener.class);

    private JBakeConfiguration config;

    public CustomFSChangeListener(JBakeConfiguration config) {
        this.config = config;
    }

    @Override
    public void fileCreated(FileChangeEvent event) throws Exception {
        LOGGER.info("File created event detected: {}", event.getFile().getURL());
        exec(event.getFile());
    }

    @Override
    public void fileDeleted(FileChangeEvent event) throws Exception {
        LOGGER.info("File deleted event detected: {}", event.getFile().getURL());
        exec(event.getFile());
    }

    @Override
    public void fileChanged(FileChangeEvent event) throws Exception {
        LOGGER.info("File changed event detected: {}", event.getFile().getURL());
        exec(event.getFile());
    }

    private void exec(FileObject file) {
        final Oven oven = new Oven(config);
        oven.bake(new File(file.getName().getPath()));
    }
}