package ip.gui.frames;

import ip.gui.SnellWlx;
import ip.gui.NetImageSelector;
import ip.gui.Print;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.net.URL;

import graphics.ImageUtils;

public class GrabFrame extends FilterFrame {

    private SnellWlx sw;

    private NetImageSelector nis;

    String home =
            "http://www.docjava.com/java/images/";
    String audioHome =
            "http://www.docjava.com/java/au/";
    String liveCam =
            "http://192.107.38.225/mydoc01.jpg";

    Menu grabMenu = getMenu("Grab");
    Menu netMenu = getMenu("ip.net");
    MenuItem cover_mi = addMenuItem(netMenu, "cover");
    MenuItem ublogo_mi = addMenuItem(netMenu, "logo");
    MenuItem author_mi = addMenuItem(netMenu, "the author");
    MenuItem plane_mi = addMenuItem(netMenu, "airplane.JPEG");
    MenuItem baboon_mi = addMenuItem(netMenu, "baboon.JPEG");
    MenuItem lena_mi = addMenuItem(netMenu, "lena.JPEG");
    MenuItem peppers_mi = addMenuItem(netMenu, "peppers.JPEG");
    MenuItem kmap_mi = addMenuItem(netMenu, "kmapAnimation.ip.gif");
    MenuItem computer_mi = addMenuItem(netMenu, "computer.au");
    MenuItem yenrab_mi = addMenuItem(netMenu, "yenrab.au");

    MenuItem live_mi = addMenuItem(netMenu, "liveCam");

    MenuItem testPattern_mi = addMenuItem(grabMenu, "[T]est Patterns");

    MenuItem grabTestPattern_mi = addMenuItem(grabMenu, "[E-G]rab Patterns");

    public void actionPerformed(ActionEvent e) {

        if (match(e, computer_mi)) {
            netSoundSelector(audioHome + "computer.au");
            return;
        }
        if (match(e, yenrab_mi)) {
            netSoundSelector(audioHome + "yenrab.au");
            return;
        }
        if (match(e, live_mi)) {
            netImageSelector(liveCam);
            return;
        }
        if (match(e, plane_mi)) {
            netImageSelector(home + "airplane.JPEG");
            return;
        }
        if (match(e, baboon_mi)) {
            netImageSelector(home + "baboon.JPEG");
            return;
        }
        if (match(e, peppers_mi)) {
            netImageSelector(home + "peppers.JPEG");
            return;
        }
        if (match(e, lena_mi)) {
            netImageSelector(home + "lena.JPEG");
            return;
        }
        if (match(e, kmap_mi)) {
            netImageSelector(home + "kmapAnimation.ip.gif");
            return;
        }

        if (match(e, author_mi)) {
            netImageSelector("http://www.docjava.com/Pub/Documentation/me.ip.gif");
            return;
        }
        if (match(e, cover_mi)) {
            netImageSelector("http://www.docjava.com/book/1558515682.m.ip.gif");
            return;
        }
        if (match(e, ublogo_mi)) {
            netImageSelector("http://www.docjava.com/bgublogo.ip.gif");
            return;
        }
        if (match(e, testPattern_mi)) {
            testPattern();
            return;
        }
        if (match(e, grabTestPattern_mi)) {
            grabTestPattern();
            return;
        }
        super.actionPerformed(e);
    }

    public GrabFrame(String title) {
        super(title);
        grabMenu.add(netMenu);

        getFileMenu().add(grabMenu);
    }

    public void testPattern() {
        sw = new SnellWlx();
        sw.init();
        sw.start();
        sw.setSize(256, 256);
    }

    public void revert() {
        if (urlString == null) {
            super.revert();
            return;
        }
        netImageSelector(urlString);
    }

    public static void netSoundSelector(String st) {
        URL url = null;
        try {
            url = new URL(st);
        } catch (Exception e) {
            e.printStackTrace();
        }
        netSoundSelector(url);
    }

    public static void netSoundSelector(URL url) {
        sound.UlawCodec.play(url);
    }

    public void netImageSelector(String st) {
        Toolkit tk = Toolkit.getDefaultToolkit();
        Image img;
        urlString = st;
        URL url = null;
        Print.println("Loading..." + st);
        try {
            url = new URL(st);
        } catch (Exception e) {
            e.printStackTrace();
        }

        img = tk.getImage(url);
        ImageUtils.waitForImage(this, img);
        if (img == null) {
            Print.println("netload failed");
            return;
        }
        setImage(img);
        setSize(getImageWidth(), getImageHeight());
        repaint();
    }

    String urlString = null;

    public void grab(Container f) {
        setImageWidth(f.getSize().width);
        setImageHeight(f.getSize().height);
        Image backBuffer = createImage(getImageWidth(), getImageHeight());
        Graphics g = backBuffer.getGraphics();
        f.paint(g);
        setImage(backBuffer);
        g = getGraphics();
        g.clearRect(0, 0, getSize().width, getSize().height);
        setSize(getImageWidth(), getImageHeight());
        repaint();
    }

    public void grabTestPattern() {
        if (sw == null) {
            testPattern();
        }
        grab(sw);
    }

    public static void main(String args[]) {
        GrabFrame gf = new GrabFrame("Grab Frame");
        gf.testPattern();
    }
}