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

import java.util.concurrent.CountDownLatch;

import io.webfolder.cdp.Example;
import io.webfolder.cdp.Launcher;
import io.webfolder.cdp.event.Events;
import io.webfolder.cdp.event.page.WindowOpen;
import io.webfolder.cdp.session.Session;
import io.webfolder.cdp.session.SessionFactory;
import io.webfolder.cdp.type.target.TargetInfo;

@Example
public class SwitchTab {

    public static void main(String[] args) throws Exception {
        Launcher launcher = new Launcher();

        try (SessionFactory factory = launcher.launch()) {
            TargetInfo found = null;

            try (Session session = factory.create()) {
                session.navigate("data:text/html, <a href=\"https://www.google.com/\" target=\"blank\">Google</a>");
                session.waitDocumentReady();
                
                CountDownLatch latch = new CountDownLatch(1);

                StringBuilder url = new StringBuilder();
                
                session.addEventListener((event, value) -> {
                    if (Events.PageWindowOpen.equals(event)) {
                        WindowOpen wo = (WindowOpen) value;
                        url.append(wo.getUrl());
                        latch.countDown();
                    }
                });

                session.click("a");
                // wait the new page
                latch.await();

                for (TargetInfo next : session.getCommand().getTarget().getTargets()) {
                    System.out.println(next.getUrl());
                    if (next.getUrl().equals(url.toString())) {
                        found = next;
                    }
                }
            }

            if (found != null) {
                try (Session session = factory.connect(found.getTargetId())) {
                    session.navigate("https://bing.com");
                }
            }
        } finally {
            launcher.kill();
        }
    }
}