/*
 * https://webfolder.io/license.html
 */
package io.webfolder.cdp.network;

import static io.webfolder.cdp.event.Events.NetworkRequestIntercepted;
import static io.webfolder.cdp.session.WaitUntil.NetworkAlmostIdle;
import static io.webfolder.cdp.type.network.ResourceType.Image;
import static java.util.Arrays.asList;

import io.webfolder.cdp.Example;
import io.webfolder.cdp.Launcher;
import io.webfolder.cdp.command.Network;
import io.webfolder.cdp.event.network.RequestIntercepted;
import io.webfolder.cdp.session.Session;
import io.webfolder.cdp.session.SessionFactory;
import io.webfolder.cdp.type.network.RequestPattern;

@Example
public class URLFiltering {

    @SuppressWarnings("deprecation")
    public static void main(String[] args) {
        Launcher launcher = new Launcher();

        try (SessionFactory factory = launcher.launch()) {
            try (Session session = factory.create()) {
                
                Network network = session.getCommand().getNetwork();
                network.enable();
                RequestPattern pattern = new RequestPattern();
                pattern.setUrlPattern("*");
                // intercept images
                pattern.setResourceType(Image);

                network.setRequestInterception(asList(pattern));

                session.addEventListener((e, v) -> {                    
                    if (NetworkRequestIntercepted.equals(e)) {
                        RequestIntercepted ri = (RequestIntercepted) v;
                        String url = ri.getRequest().getUrl();
                        // do not allow to download jpg files
                        if ( ! url.endsWith(".jpg") ) {
                            network.continueInterceptedRequest(ri.getInterceptionId());
                        }
                    }
                });

                session.navigate("https://cnn.com");
                session.waitUntil(NetworkAlmostIdle);
            }
        } finally {
            launcher.kill();
        }
    }
}