package page.tools.stats;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.wikiwebserver.core.WareHouse;
import org.wikiwebserver.core.interfaces.CSVStyler;
import org.wikiwebserver.util.IPToCountry;

import page.config.SiteTemplatedPage;
import page.image.NodeAvatar;
import page.image.UserAvatar;
import page.tools.entity.User;

import static org.wikiwebserver.html.HTMLHelper.*;

public class LiveLogRequestStyler implements CSVStyler {
	
	private static final String templatePath = "templates/default/stats/request.html";
	private static String styleTemplate = null;

	public String styleRecord(List<String> headings, List<String> record) {
		
		if (styleTemplate == null) {
			try {
				styleTemplate = WareHouse.getResourceAsString(templatePath);
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
		
		Map<String, String> replacements = new HashMap<String, String>();
		
		for (int i=0; i<headings.size(); i++) {
                    String content = record.get(i);
                    if (!"Stack Trace".equals(headings.get(i))) {
                        content = WareHouse.escapeHTMLEntities(content);
                    }
	            replacements.put("<!-- " + headings.get(i) + " -->", content);
		}
		
		for (int i=0; i<headings.size(); i++) {
			if (headings.get(i).equals("User ID")) {
				String userId = record.get(i);
				if (userId != null && userId.trim().length() > 0) {
					User user = User.getUserById(userId);
					if (userId != null) {
						replacements.put("<!-- Email -->",
						    div(ContainerType.CLASS, "email",
							    a(WareHouse.getUrlPathForClass(BrowserInfo.class) + "?userID=" + userId,
							    SiteTemplatedPage.emailImage(user, 10))
						    ));
					}
					replacements.put("<!-- User ID -->",
					    div(ContainerType.CLASS, "avatar",
						    a(WareHouse.getUrlPathForClass(BrowserInfo.class) + "?userID=" + userId,
						    image(WareHouse.getUrlPathForClass(UserAvatar.class) + "?userID=" + userId , 
						    	  "User avatar", "border='0'"))
					    ));
				}
			}
			else if (headings.get(i).equals("Node ID")) {
				String nodeId = record.get(i);
				if (nodeId != null && nodeId.trim().length() > 0) {
					replacements.put("<!-- Node ID -->",
					    div(ContainerType.CLASS, "avatar",
						    a(WareHouse.getUrlPathForClass(NodeInfo.class) + "?nodeID=" + nodeId,
						    image(WareHouse.getUrlPathForClass(NodeAvatar.class) + "?nodeID=" + nodeId , 
						    	  "Node avatar", "border='0'"))
					    ));
				}
			}
			else if (headings.get(i).equals("Code")) {
				String color = "#EEFFEE";
				if (record.get(i).startsWith("5")) color = "#FFDDDD";
				else if (record.get(i).equals("404")) color = "#FFEEEE";
				else if (record.get(i).startsWith("4")) color = "#DDDDFF";
				else if (record.get(i).startsWith("3")) color = "#FFFFEE";
				replacements.put("<!-- Colour -->", color);
			}	
			else if (headings.get(i).equals("IP Address")) {
				replacements.put("<!-- IP Country -->", IPToCountry.getCountryName(record.get(i)));
			}				
		}
		
		
		return WareHouse.performFindReplace(styleTemplate, replacements);
	}

}
