/**
 * Created by IntelliJ IDEA.
 * User: sagarmichael
 * Date: 13/02/2012
 * Time: 13:23
 * To change this template use File | Settings | File Templates.
 */
import java.io.*;
import java.net.Authenticator;
import java.net.InetAddress;
import java.net.PasswordAuthentication;
import java.net.URL;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;


public class test2 {


    // private static ArrayList<String> names = new ArrayList<String>();
    private static ArrayList<String> urls = new ArrayList<String>();

    public static void main(String[] args) throws Exception {
        Authenticator.setDefault(new MyAuthenticator());
        int i = 0;
        while(args.length > i){
            if(args[i].contains("htt")){
                if(args[i].contains("timerData")){

                }
                System.out.println("args: "+args[i]);
                urls.add(args[i]);
            }
            //         else{
            //              names.add(args[i]);
            //         }
            i++;
        }
        run();

    }
    public static void run()throws Exception{
        int i =0;
        //FileWriter outFile = new FileWriter("/Users/sagarmichael/Desktop/index.html");
        FileWriter outFile = new FileWriter("/home/backuppc/made4u-nagios/index.html");
        PrintWriter out = new PrintWriter(outFile);

        // FileWriter outFile = new FileWriter(url+"/index.html");
        // PrintWriter out = new PrintWriter(outFile);
        out.println("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
        out.println("<head><meta content=\"text/html; charset=iso-8859-1\" http-equiv=\"Content-Type\">\n" +
                "<title>Made4u monitoring system</title>\n" +
                "<link type=\"text/css\" rel=\"stylesheet\" href=\"styles.css\">\n" +
                "</link></head><body>\n" +
                "<table id=\"made4u\" cellspacing=\"0\" summary=\"Made4u monitoring systems\">\n" +
                "<caption>Made4u monitoring system </caption>\n" +
                "<tbody><tr>\n" +
                "<th class=\"nobg\" abbr=\"Test\"col\">Test</th>\n" +
                "<th abbr=\"Status\" scope=\"col\">Status</th>\n" +
                "<th abbr=\"Date\" scope=\"col\">Date</th>\n" +
                "</tr>");
        while(urls.size() > i){
            URL url =null;
            String name = urls.get(i).replace("http://made4u.k-int.com/automaticDesign/","");
            if(name.contains("design")){
                url = new URL(urls.get(i)+"?offset=0&max=100&sort=requestSubmittedTime&order=desc");
            }
            else if(name.contains("order")){
                url = new URL(urls.get(i)+"?offset=0&max=100&sort=orderRequestSubmittedTime&order=desc");
            }   else if(name.contains("timerData")){
                url = new URL(urls.get(i));
            }
            //System.out.println("name: "+name);
            //System.out.println("url: "+url);
            String sline ="";
            int i2 = 0;
            //System.out.println(getDate("y")+ " : " +getDate("t"));
            //String date = "2012-02-13";
            //System.out.println(getDate("t"));
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
            String str;


            int row = 1;
            Boolean check = true;
            while ((str = in.readLine()) != null) {
                if(str.contains("<td>")){
                    // System.out.println(str);

                    i2++ ;
                    sline = sline + str;
                    if(i2==4){
                        //  System.out.println(sline.trim());
                        i2 =0;


                        if((sline.contains("Error") || sline.contains("No viable frames") || sline.contains("No viable frame and lens combinations")) && (sline.contains(getDate("t")) || sline.contains(getDate("y")) || sline.contains("2012-02-10"))){

                            if(name.contains("design")){
                                DesignLog log = new DesignLog();
                                    log.designLog(sline);
                            }
                            else if(name.contains("order")){
                               OrderLog log = new OrderLog();
                                    log.orderLog(sline);
                            }
                            out.println("<tr>\n" +
                                    "<th class=\"spec\" abbr=\"Model\" scope=\"row\">"+name+"-fail</th>");
                            if(sline.contains("Error")){
                                out.println("<td>Error</td>");
                            }
                            else if(sline.contains("No viable frames")){
                                out.println("<td>No viable frames</td>");
                            }
                            else if(sline.contains("No viable frame and lens combinations")){
                                out.println("<td>No viable frame and lens combinations</td>");
                            }
                            out.println("<td>"+getTime()+"</td>\n" +
                                    "</tr>");

                            // writeFile("true", args[1]);
                            check = false;
                            System.out.println("********* There is an error " + getDate("t"));
                        }
                       // System.out.println("Date: " + getDate("t"));
                        if((sline.contains("Idle") || (sline.contains("Running"))) && (sline.contains(getDate("t")))){
                         //   System.out.println("here%%%%");
                            Calendar cal = new GregorianCalendar()  ;
                            TimeZone timeZone = TimeZone.getTimeZone("Europe/London");
                            cal.setTimeZone(timeZone);
                           // System.out.println("****************** " + (getDate("t")+" "+cal.get(Calendar.HOUR_OF_DAY)));
                           // System.out.println("here!!!!!!");
                            // change this for how many hours you want to the check to be
                            int a =2;
                           // System.out.println(a);
                           // System.out.println(cal.get(Calendar.HOUR_OF_DAY));
                           // System.out.println(24 - (cal.get(Calendar.HOUR_OF_DAY)));

                            boolean hour = false;
                            int b = 0;
                            while(a < (24 - (cal.get(Calendar.HOUR_OF_DAY))) ){
                             //   System.out.println(getDate("t")+" "+(cal.get(Calendar.HOUR_OF_DAY) + a));
                                if(cal.get(Calendar.HOUR_OF_DAY) < 10){
                                    if(sline.contains(getDate("t")+" "+"0"+(cal.get(Calendar.HOUR_OF_DAY) + a))||sline.contains(getDate("y")+" "+"0"+(cal.get(Calendar.HOUR_OF_DAY) + a))){
                                        hour = true;
                                    }
                                }
                                if(sline.contains(getDate("t")+" "+(cal.get(Calendar.HOUR_OF_DAY) + a))||sline.contains(getDate("y")+" "+(cal.get(Calendar.HOUR_OF_DAY) + a))||hour){
                                    out.println("<tr>\n" +
                                            "<th class=\"spec\" abbr=\"Model\" scope=\"row\">"+name+"-fail</th>");
                                    out.println("<td>Error</td>");
                                    TimerLog parse = new TimerLog();
                                    parse.htmlParser(sline);
                               //     System.out.println("new while: " + b++);
                                 //   System.out.println(getDate("t")+" "+(cal.get(Calendar.HOUR_OF_DAY) + a));
                                    out.println("<td>"+getTime()+"</td>\n" +
                                            "</tr>");

                                    check = false;

                                }
                                a++;

                            }


                        }



                        sline = "";
                    }

                }
            }
            if(check){
                // writeFile("false", args[1]);
                out.println("<tr>\n" +
                        "<th class=\"spec\" abbr=\"Model\" scope=\"row\">"+name+"-pass</th>\n" +
                        "<td>OK</td>\n" +
                        "<td>"+getTime()+"</td>\n" +
                        "</tr>");
            }
            in.close();
            i++;
        }

        out.println("</tbody></table></body></html>");
        out.close();
    }


    public static String getDate(String in){
        if(in.equals("t")){
            Calendar cal = new GregorianCalendar();
            int month = cal.get(Calendar.MONTH)+1;
            int year = cal.get(Calendar.YEAR);
            int day = cal.get(Calendar.DAY_OF_MONTH);
            //System.out.println("Current date : " + day + "/" + (month + 1) + "/" + year);
            String day2 = day + "";
            if(day < 10){

                day2 =  "0" + day;


            }
            if(month < 10){
                String month2 =  "0" + month;

                return year + "-" + month2 + "-" + day2;
            }

            return year + "-" + month + "-" + day2;
        }
        else if(in.equals("y")){
            Calendar cal = new GregorianCalendar();
            int month = cal.get(Calendar.MONTH)+1;
            int year = cal.get(Calendar.YEAR);
            int day = cal.get(Calendar.DAY_OF_MONTH)-1;
            //System.out.println("Current date : " + day + "/" + (month + 1) + "/" + year);

            if(month < 10){
                String month2 =  "0" + month;
                return year + "-" + month2 + "-" + day;
            }
            return year + "-" + month + "-" + day;
        }
        return "";
    }

    public static String getTime(){
        java.util.Date date= new java.util.Date();

        return(new Timestamp(date.getTime()).toString());

    }

}


class MyAuthenticator extends Authenticator {

    protected PasswordAuthentication getPasswordAuthentication() {
        String promptString = getRequestingPrompt();
        System.out.println(promptString);
        String hostname = getRequestingHost();
        System.out.println(hostname);
        InetAddress ipaddr = getRequestingSite();
        System.out.println(ipaddr);
        int port = getRequestingPort();

        String username = "ibvuser";
        String password = "ibvP4ss!";
        return new PasswordAuthentication(username, password.toCharArray());
    }



}
