package dataQualityWebSite;

import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.ListIterator;


public class GroupDetail 
{
	public GroupDetail
	(
		GroupElement groupElement, 
		GroupFactorList groupFactorList, 
		FactorList factorList,
		Configuration configuration
	)
	{
		int groupId;
		int factorId;
		Integer factorIdInteger;
		ListIterator<Integer> groupIterator;
		ListIterator<FactorElement> factorIterator;
		FactorElement factorElement;
		DashboardFile groupDetailFile;
		Calendar today;
		DateFormat longDateFormat;
		DateFormat shortDateFormat;
		DecimalFormat integerFormat;
		String groupWorst = "green";
		XmlElement xmlElement;
		String latestStatusDateString;

		integerFormat = new DecimalFormat("###,###,###,###,###");

		groupId = groupElement.getGroupId();
		
		groupDetailFile = new DashboardFile
		(
			configuration.getHtmlFileLocation() + 
			configuration.getGroupPrefix() +
			groupId + 
			".htm"
		);
		
    	today = Calendar.getInstance();
    	shortDateFormat = new SimpleDateFormat("dd-MMM-yyyy");
    	longDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss");
        longDateFormat.format(today.getTime());

	    
	    groupDetailFile.PutLine("<!DOCTYPE html>");
	    groupDetailFile.PutLine("<head>");
	    groupDetailFile.PutLine("  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>");  
	    groupDetailFile.PutLine
	    (
	    	"  <link rel=\"stylesheet\" type=\"text/css\" href=\"" +
	    	configuration.getLinkToStylesheets() +
	    	"style.css\"/>"
	    );

	    xmlElement = new XmlElement(2, "title", "", groupElement.getGroupTitle());
	    groupDetailFile.PutLine(xmlElement.getXmlElement());
	    
	    groupDetailFile.PutLine("</head>");
	    groupDetailFile.PutLine("<body>");

	    xmlElement = new XmlElement(2, "h1", "", groupElement.getGroupTitle());
	    groupDetailFile.PutLine(xmlElement.getXmlElement());

        groupDetailFile.PutLine("    <form action=\"index.html\">");
        groupDetailFile.PutLine("      <button type=\"submit\" style=\"padding:0px;margin:0px;width:0px;height:0px;border:none;\">");
        groupDetailFile.PutLine("        <img");
        groupDetailFile.PutLine("          src=\"" + configuration.getLinkToKpiImages() + "button_back_to_summary.png\""); 
        groupDetailFile.PutLine("          style=\"display:inline; width:100px;\"");
        groupDetailFile.PutLine("          alt=\"Go back to summary\"");
        groupDetailFile.PutLine("        >");
        groupDetailFile.PutLine("      </button>");
        groupDetailFile.PutLine("    </form>");

	    xmlElement = new XmlElement(2, "h4", "", "Published: " + longDateFormat.format(today.getTime()) + " GMT");
	    groupDetailFile.PutLine(xmlElement.getXmlElement());

	    groupDetailFile.PutLine("  <table>");
	    groupDetailFile.PutLine("    <tr>");
	    groupDetailFile.PutLine("      <th> </th><th>Chart</th><th>Audit Date</th><th>Audit Value</th><th>Value Change</th>");
	    groupDetailFile.PutLine("    </tr>");
        
		//  Get all the red factors (if there are any) first
		
		for (groupIterator = groupFactorList.listIterator(); groupIterator.hasNext();)
		{
			factorIdInteger = (Integer) groupIterator.next();
			factorId = factorIdInteger.intValue();
						
			for(factorIterator = factorList.listIterator(); factorIterator.hasNext();)
			{
				factorElement = (FactorElement) factorIterator.next();
				if (factorElement.getFactorId() == factorId)
				{
					if (factorElement.getFactorStatus().equals("red"))
					{
						groupWorst = new String("red");
						
						groupDetailFile.PutLine("    <tr>");
						groupDetailFile.PutLine("      <td>");
						
						groupDetailFile.PutLine
						(
							"        <img " +
							"src=\"" + 
							configuration.getLinkToKpiImages() + 
							factorElement.getFactorStatus() + 
							"." + 
							configuration.getKpiImageType() +
		                    "\" alt=\"" + factorElement.getFactorStatus() + "\" " + 
		                    "style=\"width:15px;height:15px;vertical-align:middle;\" " +
							"/>"						
						);
						
						groupDetailFile.PutLine("      </td>");
						
						groupDetailFile.PutLine("      <td style=\"text-align:left;\">");
					    xmlElement = new XmlElement
					    (
					    	6, 
					    	"a", 
					    	"href=\"" +
					    	configuration.getChartPrefix() +
					    	factorElement.getFactorId() +
					    	".htm\"",
					    	factorElement.getFactorTitle()
					    );
					    groupDetailFile.PutLine(xmlElement.getXmlElement());
						groupDetailFile.PutLine("      </td>");
						
					    if (factorElement.getLatestStatusDate() == null)
					    	latestStatusDateString = "No Data Recorded";
					    else
					    	latestStatusDateString = shortDateFormat.format(factorElement.getLatestStatusDate().getTime());
					    xmlElement = new XmlElement(6, "td", "", latestStatusDateString);
					    groupDetailFile.PutLine(xmlElement.getXmlElement());
						
					    xmlElement = new XmlElement(6, "td", "style=\"text-align:right;\"", integerFormat.format(factorElement.getLatestValue()));
					    groupDetailFile.PutLine(xmlElement.getXmlElement());

					    xmlElement = new XmlElement(6, "td", "style=\"text-align:right;\"", integerFormat.format(factorElement.getLatestChange()));
					    groupDetailFile.PutLine(xmlElement.getXmlElement());
					    groupDetailFile.PutLine("    </tr>");
					}
					break;
				}
			}
		}

		//  Next get all the amber factors (if there are any)
		
		for (groupIterator = groupFactorList.listIterator(); groupIterator.hasNext();)
		{
			factorIdInteger = (Integer) groupIterator.next();
			factorId = factorIdInteger.intValue();
			
			for(factorIterator = factorList.listIterator(); factorIterator.hasNext();)
			{
				factorElement = (FactorElement) factorIterator.next();
				if (factorElement.getFactorId() == factorId)
				{
					if (factorElement.getFactorStatus().equals("amber"))
					{
						if (groupWorst.equals("green"))
							groupWorst = new String("amber");
						
						groupDetailFile.PutLine("    <tr>");
						groupDetailFile.PutLine("      <td>");
						
						groupDetailFile.PutLine
						(
							"        <img " +
							"src=\"" + 
							configuration.getLinkToKpiImages() + 
							factorElement.getFactorStatus() + 
							"." + 
							configuration.getKpiImageType() +
		                    "\" alt=\"" + factorElement.getFactorStatus() + "\" " + 
		                    "style=\"width:15px;height:15px;vertical-align:middle;\" " +
							"/>"						
						);

						groupDetailFile.PutLine("      </td>");
						
						groupDetailFile.PutLine("      <td style=\"text-align:left;\">");
					    xmlElement = new XmlElement
					    (
					    	6, 
					    	"a", 
					    	"href=\"" +
					    	configuration.getChartPrefix() +
					    	factorElement.getFactorId() +
					    	".htm\"",
					    	factorElement.getFactorTitle()
					    );
					    groupDetailFile.PutLine(xmlElement.getXmlElement());
						groupDetailFile.PutLine("      </td>");
						
					    if (factorElement.getLatestStatusDate() == null)
					    	latestStatusDateString = "No Data Recorded";
					    else
					    	latestStatusDateString = shortDateFormat.format(factorElement.getLatestStatusDate().getTime());
					    xmlElement = new XmlElement(6, "td", "", latestStatusDateString);
					    groupDetailFile.PutLine(xmlElement.getXmlElement());
						
					    xmlElement = new XmlElement(6, "td", "style=\"text-align:right;\"", integerFormat.format(factorElement.getLatestValue()));
					    groupDetailFile.PutLine(xmlElement.getXmlElement());

					    xmlElement = new XmlElement(6, "td", "style=\"text-align:right;\"", integerFormat.format(factorElement.getLatestChange()));
					    groupDetailFile.PutLine(xmlElement.getXmlElement());

					    groupDetailFile.PutLine("    </tr>");
					}
					break;
				}
			}
		}

		//  Next get all the green factors (if there are any)
		
		for (groupIterator = groupFactorList.listIterator(); groupIterator.hasNext();)
		{
			factorIdInteger = (Integer) groupIterator.next();
			factorId = factorIdInteger.intValue();
			
			for(factorIterator = factorList.listIterator(); factorIterator.hasNext();)
			{
				factorElement = (FactorElement) factorIterator.next();
				if (factorElement.getFactorId() == factorId)
				{
					if (factorElement.getFactorStatus().equals("green"))
					{						
						groupDetailFile.PutLine("    <tr>");
						groupDetailFile.PutLine("      <td style=\"text-align:left;\">");
						
						groupDetailFile.PutLine
						(
							"        <img " +
							"src=\"" + 
							configuration.getLinkToKpiImages() + 
							factorElement.getFactorStatus() + 
							"." + 
							configuration.getKpiImageType() +
		                    "\" alt=\"" + factorElement.getFactorStatus() + "\" " + 
		                    "style=\"width:15px;height:15px;vertical-align:middle;\" " +
							"/>"						
						);

						groupDetailFile.PutLine("      </td>");
						
						groupDetailFile.PutLine("      <td style=\"text-align:left;\">");
					    xmlElement = new XmlElement
					    (
					    	6, 
					    	"a", 
					    	"href=\"" +
					    	configuration.getChartPrefix() +
					    	factorElement.getFactorId() +
					    	".htm\"",
					    	factorElement.getFactorTitle()
					    );
					    groupDetailFile.PutLine(xmlElement.getXmlElement());
						groupDetailFile.PutLine("      </td>");
						
					    if (factorElement.getLatestStatusDate() == null)
					    	latestStatusDateString = "No Data Recorded";
					    else
					    	latestStatusDateString = shortDateFormat.format(factorElement.getLatestStatusDate().getTime());
					    xmlElement = new XmlElement(6, "td", "", latestStatusDateString);
					    groupDetailFile.PutLine(xmlElement.getXmlElement());
						
					    xmlElement = new XmlElement(6, "td", "style=\"text-align:right;\"", integerFormat.format(factorElement.getLatestValue()));
					    groupDetailFile.PutLine(xmlElement.getXmlElement());

					    xmlElement = new XmlElement(6, "td", "style=\"text-align:right;\"", integerFormat.format(factorElement.getLatestChange()));
					    groupDetailFile.PutLine(xmlElement.getXmlElement());

					    groupDetailFile.PutLine("    </tr>");
					}
					break;
				}
			}
		}

		//  Finally get any unknown (grey) factors (if there are any)
		
		for (groupIterator = groupFactorList.listIterator(); groupIterator.hasNext();)
		{
			factorIdInteger = (Integer) groupIterator.next();
			factorId = factorIdInteger.intValue();
			
			for(factorIterator = factorList.listIterator(); factorIterator.hasNext();)
			{
				factorElement = (FactorElement) factorIterator.next();
				if (factorElement.getFactorId() == factorId)
				{
					if (factorElement.getFactorStatus().equals("grey"))
					{
						if (groupWorst.equals("green"))
							groupWorst = new String("grey");

						groupDetailFile.PutLine("    <tr>");
						groupDetailFile.PutLine("      <td>");
						
						groupDetailFile.PutLine
						(
							"        <img " +
							"src=\"" + 
							configuration.getLinkToKpiImages() + 
							factorElement.getFactorStatus() + 
							"." + 
							configuration.getKpiImageType() +
		                    "\" alt=\"" + factorElement.getFactorStatus() + "\" " + 
		                    "style=\"width:15px;height:15px;vertical-align:middle;\" " +
							"/>"						
						);

						groupDetailFile.PutLine("      </td>");
						
						groupDetailFile.PutLine("      <td style=\"text-align:left;\">");
					    xmlElement = new XmlElement
					    (
					    	6, 
					    	"a", 
					    	"href=\"" +
					    	configuration.getChartPrefix() +
					    	factorElement.getFactorId() +
					    	".htm\"",
					    	factorElement.getFactorTitle()
					    );
					    groupDetailFile.PutLine(xmlElement.getXmlElement());
						groupDetailFile.PutLine("      </td>");
						
					    if (factorElement.getLatestStatusDate() == null)
					    	latestStatusDateString = "No Data Recorded";
					    else
					    	latestStatusDateString = shortDateFormat.format(factorElement.getLatestStatusDate().getTime());
					    xmlElement = new XmlElement(6, "td", "", latestStatusDateString);
					    groupDetailFile.PutLine(xmlElement.getXmlElement());
						
					    xmlElement = new XmlElement(6, "td", "style=\"text-align:right;\"", integerFormat.format(factorElement.getLatestValue()));
					    groupDetailFile.PutLine(xmlElement.getXmlElement());

					    xmlElement = new XmlElement(6, "td", "style=\"text-align:right;\"", integerFormat.format(factorElement.getLatestChange()));
					    groupDetailFile.PutLine(xmlElement.getXmlElement());

					    groupDetailFile.PutLine("    </tr>");
					}
					break;
				}
			}
		}
	    
		groupDetailFile.PutLine("  </table>");

		groupElement.setGroupStatus(groupWorst);
		
        groupDetailFile.PutLine("    <form action=\"index.html\">");
        groupDetailFile.PutLine("      <button type=\"submit\" style=\"padding:0px;margin:0px;width:0px;height:0px;border:none;\">");
        groupDetailFile.PutLine("        <img");
        groupDetailFile.PutLine("          src=\"" + configuration.getLinkToKpiImages() + "button_back_to_summary.png\""); 
        groupDetailFile.PutLine("          style=\"display:inline; width:100px;\"");
        groupDetailFile.PutLine("          alt=\"Go back to summary\"");
        groupDetailFile.PutLine("        >");
        groupDetailFile.PutLine("      </button>");
        groupDetailFile.PutLine("    </form>");

	    xmlElement = new XmlElement(2, "h4", "", "Published: " + longDateFormat.format(today.getTime()) + " GMT");
	    groupDetailFile.PutLine(xmlElement.getXmlElement());
	    
		groupDetailFile.PutLine("</body>");
	    
		groupDetailFile.PutLine("</html>");
		
		groupDetailFile.Close();
	}
}
