import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.util.*;


public class MainMicrowave extends JFrame implements Feeder, MouseListener {

    private MicrowavePanel mp;
    private DatagramServer ds;

    public MainMicrowave() {
        super("Microwave demonstration");
        setSize(800, 600);
        setVisible(true);
        ds = new DatagramServer();
        ds.setFeeder(this);

        initComponents();
        ds.runServer();
    }

    public void initComponents() {
        setLayout(new BorderLayout());
        mp = new MicrowavePanel();
        mp.addMouseListener(this);
        mp.setPreferredSize(new Dimension(800,600));
        add(mp, BorderLayout.CENTER);
        mp.revalidate();
    }

    public void setMessage(String msg) {
        if (mp == null) {
            return;
        }

        int index;
        String s;
        int duration;
        System.out.println("Got message:" + msg);
        try {
            if (msg.startsWith("Duration ")) {
                s = msg.substring(9, msg.length());

                duration = Integer.decode(s.trim()).intValue();
                mp.setDuration(duration);
                mp.setStart(false);
                //System.out.println("Setting new duration :" + duration);
                mp.setCookingFinished(false);
            } else if (msg.startsWith("Start ")) {
                s = msg.substring(6, msg.length());

                duration = Integer.decode(s.trim()).intValue();
                mp.setDuration(duration);
                mp.setStart(true);
                mp.setCookingFinished(false);
                //System.out.println("Setting new duration (start): " + duration);
            } else if (msg.startsWith("Magnetron_ON")) {
                mp.setMagnetronON(true);
                mp.setCookingFinished(false);
            } else if (msg.startsWith("Magnetron_OFF")) {
                mp.setMagnetronON(false);
                mp.setCookingFinished(false);
            } else if (msg.startsWith("Open Door")) {
                mp.setDoorOpened(true);
                mp.setCookingFinished(false);
            } else if (msg.startsWith("Close Door")) {
                mp.setDoorOpened(false);
                mp.setCookingFinished(false);
            } else if (msg.startsWith("Dring")) {
                mp.setCookingFinished(true);
            }
        } catch (Exception e) {
            System.out.println("Exception when computing message: " + e.getMessage());
        }

        mp.repaint();
    }

    public void mouseClicked(MouseEvent e){
        int x = e.getX();
        int y = e.getY();

        System.out.println("Mouse clicked!!!");

        // START?
        if ((x>630)&&(x<720)&&(y>335)&&(y<365)) {
            System.out.println("Mouse clicked on start");
            if (ds != null) {
                ds.sendDatagramTo(" ", 8375);

            }
            System.out.println("Action on start sent");
        }

    }
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mousePressed(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}

    public static void main(String[] args) {
        MainMicrowave mmw = new MainMicrowave();
    }





}