// AuroraAlert
// code by jph

import java.awt.*;
import java.awt.image.*;
import java.lang.*;
import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
import javax.sound.sampled.*;
import javax.swing.*;

public class AuroraAlert
implements Runnable
{
  public static final int PICW=1440;
  public static final int PICH=960;
  
  HashSet myHashSet;
  Thread myThread;
  double amp=199;
  
	public static void main(String[] args) {
    AuroraAlert myAuroraAlert=new AuroraAlert();
  }
 
  public AuroraAlert() {    
    String myString;
    myHashSet=new HashSet();    
    try {
      URL myURL;
      URLConnection myURLConnection;
      DataInputStream myDataInputStream;
      myURL=new URL("http://www.hakenberg.de/networking/alert/reference.tab");
      System.out.println("open "+myURL);
      myURLConnection=myURL.openConnection();
      myURLConnection.setDoInput(true);
      myURLConnection.setUseCaches(false);
      myDataInputStream=new DataInputStream(myURLConnection.getInputStream());              
      Thread.sleep(500);
      if (myDataInputStream.available()>0)
        amp=10*(double)myDataInputStream.readByte();
      System.out.println(" factor == "+amp);
      int cnt=0;
      while (myDataInputStream.available()>0) {
        myHashSet.add(new Integer(myDataInputStream.readInt()));
        cnt++;
      }
      System.out.println(" colors #= "+cnt);
      myDataInputStream.close();
    } catch (Exception myException) {
      System.out.println(myException);
    }    
		myThread=new Thread(this);
		myThread.start();
	}
	
	public void run() {
    int c1,c2;
    JFrame myJFrame=new JFrame();
    SimpleDateFormat mySimpleDateFormat=new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss",Locale.getDefault());		
		int[] myInt=new int[PICH*PICW];
		double f;
		long sum;
  	while (true) {
		  try {
        Image myImage=myJFrame.getToolkit().getImage(new URL("http://www.irf.se/allsky/LAST.JPG"));
      	MediaTracker myMediaTracker=new MediaTracker(myJFrame); 	
        myMediaTracker.addImage(myImage,0);      
        myMediaTracker.waitForAll();              
        PixelGrabber myPixelGrabber=new PixelGrabber(myImage,0,0,PICW,PICH,myInt,0,PICW);
        myPixelGrabber.grabPixels();
        sum=0;
        for (c1=0;c1<myInt.length;c1++)          
          if (myHashSet.contains(new Integer(myInt[c1]&0xffffff)))
            sum++;
        f=(double)sum*amp/(double)myInt.length;        			        
        System.out.println(""+mySimpleDateFormat.format(new Date())+" => "+(float)f);
        if (f>1) {
          Clip myClip=AudioSystem.getClip();
          AudioInputStream myAudioInputStream=AudioSystem.getAudioInputStream(new File("chime.wav"));
          myClip.open(myAudioInputStream);
          myClip.start();
        }
        myThread.sleep(59000);
      } catch (Exception myException) {
        System.out.println(myException);
      }
    }
  }
}
