import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class ass2ver1 extends Applet implements ActionListener, MouseListener
{
    int xcoor, ycoor;
    Button penguinButton, gardenButton;
    int buttonString=-1;
    Label label;
    TextField text;
    String str;
    String search_term[]={"beaches","mountains","penguins","flowers"};
	String search_info[]={"Camps Bay and False Bay are popular beaches for the family",
						  "Table Mountain and Twelve Apostles are great local attractions",
						  "There are plenty of penguins at the Colony",
						  "Over 2,000 varieties of flowers at the Botanical Garden"};
	String display_search="";

	int search_query=-1;
	int nearest_object=-1;
    int distance[]= new int[6];
    int numOfObjects=6;
    int shortestDistance;
    int nearest;

    int xobjects[]={130,290,410,380,280,130};
    int yobjects[]={170,140,30,250,450,340};
    String displayDesc[]={"False Bay is perfect for sunbathing","Botanical Gardens, lovely in Summer","The Twelve Apostles, a must see",
                        "Camps Bay is great for families", "Take a hike up Table Mountain", "Visit the African Penguins!"};

    Font font;

        public void start()
        {
            addMouseListener(this);
        }

        public void init()
        {
            font = new Font("Verdana",Font.BOLD,10);
            setLayout(null);

			label = new Label("Enter search query:");
			label.setBounds(10,550,120,20);
			add(label);

			text = new TextField(15);
			text.addActionListener(this);
			text.setBounds(150,550,140,20);
			add(text);

            penguinButton = new Button("Penguins");
			penguinButton.setBounds(10,450,100,40);
			penguinButton.addActionListener(this);

            gardenButton = new Button("Gardens");
			gardenButton.setBounds(10,490,100,40);
			gardenButton.addActionListener(this);
            add(penguinButton);add(gardenButton);
        }

        public void actionPerformed(ActionEvent e)
        {
			str = e.getActionCommand();
			text.setText("");

            if(e.getSource()==penguinButton)
            {
                buttonString=0;
                repaint();
            }
            else if(e.getSource()==gardenButton)
            {
                buttonString=1;
                repaint();
            }
            else if(e.getSource()==text)
            {
				str = e.getActionCommand();
				int i;
				for(i=0; i<search_term.length;i++)
				{
					if(search_term[i].equals(str))
					{
						display_search=search_info[i];
						buttonString=-1;
					}
				}
				repaint();
			}
        }

        public void mouseClicked(MouseEvent e)
        {
            //get coordinates of user's click
            xcoor=e.getX(); ycoor=e.getY();

			paint(getGraphics());
			repaint();
        }

        public void mousePressed(MouseEvent e)
        {
			for(int i=0; i < distance.length; i++)
			{
				distance[i] = (int)Math.sqrt((int)(Math.pow((e.getX() - xobjects[i]),2) + Math.pow((e.getY() - yobjects[i]),2)));
			}

				shortestDistance = distance[0];
				nearest = 0;

			for(int n=0; n<numOfObjects; n++)
			{
				if(shortestDistance > distance[n])
				{
					shortestDistance = distance[n];
					nearest = n;
				}
			}
			repaint();
        }

        public void mouseReleased(MouseEvent e){}
        public void mouseEntered(MouseEvent e){}
        public void mouseExited(MouseEvent e){}

	public void paint(Graphics g)
	{
		setBackground(new java.awt.Color(30,144,255));
                g.setFont(font);

				map(g);
                campsBay(g);
				Path(g);
                falseBay(g);
                twelveApostles(g);
                title(g);
                botanicalGardens(g);
                penguinColony(g);
                tableMountain(g);

                switch(buttonString)
                {
                    case(0):
                        g.drawString("The penguins are very friendly",115,390);
                        break;
                    case(1):
                        g.drawString("Beautiful flowers at Botanical Gardens",200,180);
                        break;
                }

                g.drawString(displayDesc[nearest],50,50);

				g.drawString(display_search,20,550);

                //draws a circle where user has clicked
                g.setColor(Color.black);
                g.fillOval(xcoor-2,ycoor-2,4,4);
                showStatus("Oval at ["+xcoor+ ","+ycoor+"]");


	}

        public void title(Graphics g)
        {
            g.setColor(Color.black);

            g.setFont(new Font("Verdana",Font.BOLD+Font.ITALIC,20));
            g.drawString("Map of Cape Town, South Africa",10,30);
			g.setFont(font);

        }

        public void falseBay(Graphics g)
        {
            int xfalse[]={90,120,160,150};
            int yfalse[]={200,200,150,120};
            g.setColor(new java.awt.Color(218,165,32));
            Polygon falseBay = new Polygon(xfalse,yfalse,xfalse.length);
            g.fillPolygon(falseBay);
            g.setColor(Color.black);
            g.drawString("False Bay",120,190);
        }

        public void campsBay(Graphics g)
        {
            int xcamps[]={350,340,410,440};
            int ycamps[]={300,270,200,210};
            g.setColor(new java.awt.Color(218,165,32));
            g.fillPolygon(xcamps,ycamps,xcamps.length);
            g.setColor(Color.black);
            g.drawString("Camps Bay",370,270);
        }

        public void map(Graphics g)
        {

            int xpoints[]={300,220,200,150,150,90,80,100,150,150,130,
				   220,210,280,340,300,330,350,320,350,450,500,500};
            int ypoints[]={0,50,20,50,120,200,250,270,280,330,350,420,
				   450,600,590,520,470,400,350,300,200,200,0};


            g.setColor(new java.awt.Color(0,205,0));
            g.fillPolygon(xpoints,ypoints,xpoints.length);
        }

        public void twelveApostles(Graphics g)
        {
            int xOne[]={350,440,410,380};
            int yOne[]={50,50,10,10};
            g.setColor(new java.awt.Color(82,82,82));
            g.fillPolygon(xOne,yOne,xOne.length);

            int xTwo[]={380,470,440,410};
            int yTwo[]={50,50,20,20};
            g.setColor(new java.awt.Color(110,110,110));
            g.fillPolygon(xTwo,yTwo,xTwo.length);

            int x3[]={430,490,470,450};
            int y3[]={50,50,30,30};
            g.setColor(new java.awt.Color(94,94,94));
            g.fillPolygon(x3,y3,x3.length);

            g.setColor(Color.black);
            g.drawString("Twelve Apostles", 360,60);
        }

        public void botanicalGardens(Graphics g)
        {
            g.setColor(new java.awt.Color(238,18,137));
            g.fillOval(280,110,30,30);
            g.setColor(new java.awt.Color(0,255,0));
            g.fillOval(260,120,20,20);
            g.setColor(new java.awt.Color(72,118,255));
            g.fillOval(260,130,30,30);
            g.setColor(new java.awt.Color(255,69,0));
            g.fillOval(270,150,20,20);
            g.setColor(new java.awt.Color(255,255,0));
            g.fillOval(290,150,10,10);
            g.setColor(new java.awt.Color(137,71,137));
            g.fillOval(290,130,20,20);
            g.setColor(new java.awt.Color(255,165,0));
            g.fillOval(300,120,15,15);
            g.setColor(new java.awt.Color(216,191,216));
            g.fillOval(280,130,20,20);
            g.setColor(Color.black);
            g.drawString("Botanical Garden",250,160);
        }

        public void penguinColony(Graphics g)
        {
            g.setColor(Color.black);
            g.fillOval(160,300,30,30);
            g.setColor(Color.orange);
            int xfoot[]={160,190,180,170};
            int yfoot[]={365,365,355,355};
            g.fillPolygon(xfoot,yfoot,xfoot.length);
            g.setColor(Color.black);
            g.fillOval(157,320,35,45);
            g.setColor(Color.orange);
            int xbeak[]={170,180,170};
            int ybeak[]={320,320,325};
            g.fillPolygon(xbeak,ybeak,xbeak.length);
            g.setColor(Color.white);
            g.fillOval(165,310,5,5);
            g.fillOval(175,310,5,5);
            g.fillOval(170,330,10,25);
            g.setColor(Color.black);
            g.drawString("Penguin Colony",130,380);
        }

        public void tableMountain(Graphics g)
        {
            int xtable[]={240,315,310,310,260,250,245};
            int ytable[]={470,470,450,430,430,450,450};
            g.setColor(new java.awt.Color(139,69,0));
            g.fillPolygon(xtable,ytable,xtable.length);
            g.setColor(Color.black);
            g.drawString("Table Mountain",230,480);
        }

        public void Path(Graphics g)
        {
            int xpath[] = {280,200,210,150,260,400,370,320,280,280,310,360,380,270,170,220,210,280,280};
            int ypath[] = {420,350,290,180,90,60,230,250,420,400,240,220,80,100,180,290,350,400,420};

            g.setColor(new java.awt.Color(176,196,222));
            g.fillPolygon(xpath,ypath,xpath.length);
        }
    }
