package dataQualityWebSite;

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


public class Detail 
{

	private DashboardFile htmlDetailFile;
	private Calendar today;
	private DateFormat longDateFormat;
	private DateFormat shortDateFormat;

	public Detail(SeriesList seriesList, FactorElement factorElement, Configuration configuration)
	{
		ListIterator<SeriesElement> iterator;
		SeriesElement seriesElement;
		DecimalFormat decimalFormat;
		XmlElement xmlElement;

		decimalFormat = new DecimalFormat("###,###,###,###,###");  //		decimalFormatNoCommas = new DecimalFormat("###############");
		
		htmlDetailFile = new DashboardFile
		(
			configuration.getHtmlFileLocation() +
			configuration.getDataTablePrefix() + 
			factorElement.getFactorId() + 
			".htm"
		);
		
    	today = Calendar.getInstance();
    	shortDateFormat = new SimpleDateFormat("dd-MMM-yyyy");
    	longDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss");
        longDateFormat.format(today.getTime());
	    
        htmlDetailFile.PutLine("<!DOCTYPE html>");
        htmlDetailFile.PutLine("<html lang=\"en\">");
        htmlDetailFile.PutLine("<head>");
        htmlDetailFile.PutLine("  <title>Chart Title</title>");
        htmlDetailFile.PutLine("  <meta charset=\"UTF-8\">");
        
        htmlDetailFile.PutLine("  <style>");
        htmlDetailFile.PutLine("    .grid-container ");
        htmlDetailFile.PutLine("    {");
        htmlDetailFile.PutLine("      display: grid;");
        htmlDetailFile.PutLine("      grid-template-columns: 120px 120px 120px 120px;");
        htmlDetailFile.PutLine("      padding-top: 10px;");
        htmlDetailFile.PutLine("    }");
        htmlDetailFile.PutLine("  </style>");
        htmlDetailFile.PutLine("  <script>");
        htmlDetailFile.PutLine("   function goBack()");
        htmlDetailFile.PutLine("    {");
        htmlDetailFile.PutLine("      window.history.back();");
        htmlDetailFile.PutLine("    }");
        htmlDetailFile.PutLine("  </script>");
        
        htmlDetailFile.PutLine("  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>");  
	    htmlDetailFile.PutLine
	    (
	    	"  <link rel=\"stylesheet\" type=\"text/css\" href=\"" +
	    	configuration.getLinkToStylesheets() +
	    	"style.css\"/>"
	    );

	    xmlElement = new XmlElement(2, "title", "", factorElement.getFactorTitle());
	    htmlDetailFile.PutLine(xmlElement.getXmlElement());
	    
	    htmlDetailFile.PutLine("</head>");
	    htmlDetailFile.PutLine("<body>");


	    xmlElement = new XmlElement
	    (
	    	2, 
	    	"h1", 
	    	"", 
	    	factorElement.getFactorTitle()
	    );
	    htmlDetailFile.PutLine(xmlElement.getXmlElement());

	    xmlElement = new XmlElement
	    (
	    	2, 
	    	"h3", 
	    	"", 
	    	factorElement.getDescription()
	    );
	    htmlDetailFile.PutLine(xmlElement.getXmlElement());
	    
	    xmlElement = new XmlElement(2, "h4", "", "Published: " + longDateFormat.format(today.getTime()) + " GMT");
	    htmlDetailFile.PutLine(xmlElement.getXmlElement());	    
	    
	    htmlDetailFile.PutLine("<div class=\"grid-container\">");
        htmlDetailFile.PutLine("  <div class=\"grid-item\">");
        htmlDetailFile.PutLine("    <form action=" + configuration.getLinkToIssueTrackingNew() + ">");
        htmlDetailFile.PutLine("      <button type=\"submit\" style=\"padding:0px;margin:0px;width:0px;height:0px;border:none;\">");
        htmlDetailFile.PutLine("        <img");
        htmlDetailFile.PutLine("          src=\"" + configuration.getLinkToKpiImages() + "button_create_a_ticket.png\""); 
        htmlDetailFile.PutLine("          style=\"display:inline; width:100px;\"");
        htmlDetailFile.PutLine("          alt=\"Create a ticket\"");
        htmlDetailFile.PutLine("        >");
        htmlDetailFile.PutLine("      </button>");
        htmlDetailFile.PutLine("      <input type=\"hidden\" name=\"summary\" value=\"" + factorElement.getFactorTitle() + "\">");
        htmlDetailFile.PutLine("      <input type=\"hidden\" name=\"type\" value=\"defect\">");
        htmlDetailFile.PutLine("      <input type=\"hidden\" name=\"component\" value=\"Data Quality\">");
        htmlDetailFile.PutLine("    </form>");
        htmlDetailFile.PutLine("  </div>");
        htmlDetailFile.PutLine("  <div class=\"grid-item\">");

        // Can't understand why I have to nudge the 'back to chart' button when it works fine on other pages
        
        htmlDetailFile.PutLine("  <button type=\"button\" onclick=\"goBack()\" style=\"padding:0px;margin-top:10px;margin-left:10px;width:0px;height:0px;border:none;\">");
        htmlDetailFile.PutLine("    <img");
        htmlDetailFile.PutLine("      src=\"" + configuration.getLinkToKpiImages() + "button_back_to_chart.png\"");
        htmlDetailFile.PutLine("      style=\"display:inline; width:100px;\"");
        htmlDetailFile.PutLine("      alt=\"Go back to chart\"");
        htmlDetailFile.PutLine("    >");
        htmlDetailFile.PutLine("  </button>");
        htmlDetailFile.PutLine("  </div>");
        htmlDetailFile.PutLine("  <div class=\"grid-item\">");
        htmlDetailFile.PutLine("    <form action=\"index.html\">");
        htmlDetailFile.PutLine("      <button type=\"submit\" style=\"padding:0px;margin:0px;width:0px;height:0px;border:none;\">");
        htmlDetailFile.PutLine("        <img");
        htmlDetailFile.PutLine("          src=\"" + configuration.getLinkToKpiImages() + "button_back_to_summary.png\""); 
        htmlDetailFile.PutLine("          style=\"display:inline; width:100px;\"");
        htmlDetailFile.PutLine("          alt=\"Go back to summary\"");
        htmlDetailFile.PutLine("        >");
        htmlDetailFile.PutLine("      </button>");
        htmlDetailFile.PutLine("    </form>");
        htmlDetailFile.PutLine("  </div>");
        htmlDetailFile.PutLine("</div>");
        
	    htmlDetailFile.PutLine("  <table>");
	    htmlDetailFile.PutLine("    <tr>");
	    htmlDetailFile.PutLine("      <th> </th><th>Audit Date</th><th>Audit Value</th><th>Value Change</th>");
	    htmlDetailFile.PutLine("    </tr>");

		for (iterator = seriesList.listIterator(seriesList.size()); iterator.hasPrevious();)
		{
			seriesElement = (SeriesElement) iterator.previous();

		    htmlDetailFile.PutLine("    <tr>");
		    htmlDetailFile.PutLine("      <td>");

		    htmlDetailFile.PutLine
		    (
		    	"        <img " +
		    	"src=\"" +
				configuration.getLinkToKpiImages() +  
				seriesElement.getStatus() +           // need status for each measure value
				"." +
				configuration.getKpiImageType() +
				"\" " +
				"alt=\"" +
				seriesElement.getStatus() +
				"\" " +
				"/>"
			);
										
		    htmlDetailFile.PutLine("      </td>");
	    
		    xmlElement = new XmlElement
		    (   6,
		    	"td", 
		    	"",
		    	shortDateFormat.format(seriesElement.getAuditDate().getTime())
		    );
		    htmlDetailFile.PutLine(xmlElement.getXmlElement());
		    
		    xmlElement = new XmlElement
		    (
		        6,
		    	"td", 
		    	"style=\"text-align:right;\"",
		    	decimalFormat.format(seriesElement.getValue())
		    );
		    htmlDetailFile.PutLine(xmlElement.getXmlElement());
		    
		    xmlElement = new XmlElement
		    (
		        6,
		    	"td", 
		    	"style=\"text-align:right;\"",
		    	decimalFormat.format(seriesElement.getChange())
		    );
		    htmlDetailFile.PutLine(xmlElement.getXmlElement());
		    
		    htmlDetailFile.PutLine("    </tr>");
		}

		htmlDetailFile.PutLine("  </table>");
		    
	    xmlElement = new XmlElement(2, "h4", "", "Published: " + longDateFormat.format(today.getTime()) + " GMT");
	    htmlDetailFile.PutLine(xmlElement.getXmlElement());

	    htmlDetailFile.PutLine("  </body>");
	    htmlDetailFile.PutLine("</html>");
		
		htmlDetailFile.Close();
	}
}
