package scripts.task_custom_field_value;

import com.trackstudio.exception.GranException;
import com.trackstudio.external.TaskUDFValueScript;
import com.trackstudio.secured.SecuredStatusBean;
import com.trackstudio.secured.SecuredTaskBean;

import java.util.ArrayList;
import java.util.HashMap;

public class PieChart  implements TaskUDFValueScript {

    public Object calculate(SecuredTaskBean securedTaskBean) throws GranException {

                ArrayList<SecuredTaskBean> children = securedTaskBean.getChildren();
                HashMap<SecuredStatusBean, Integer> states = new HashMap<SecuredStatusBean, Integer>();
                for (SecuredTaskBean task : children) {


                            if (states.containsKey(task.getStatus())){
                                Integer amo=states.get(task.getStatus());
                                states.put(task.getStatus(), amo+1);
                            }
                            else states.put(task.getStatus(), 1);
                        }


                StringBuffer buf = new StringBuffer();

                buf.append("<style class=\"text/css\">");
                buf.append("/*plugin styles*/\n" +
                        ".visualize { border: 1px solid #888; position: relative; background: #fafafa; }\n" +
                        ".visualize canvas { position: absolute; }\n" +
                        ".visualize ul,.visualize li { margin: 0; padding: 0;}\n" +
                        "\n" +
                        "/*pie labels*/\n" +
                        ".visualize-pie .visualize-labels { list-style: none; }\n" +
                        ".visualize-pie .visualize-label-pos, .visualize-pie .visualize-label { position: absolute;  margin: 0; padding:0; }\n" +
                        ".visualize-pie .visualize-label { display: block; color: #fff; font-weight: bold; font-size: 14px; }\n" +
                        ".visualize-pie-outside .visualize-label { color: #000; font-weight: normal; }"+
                        "/*table title, key elements*/\n" +
                        ".visualize .visualize-info { padding: 3px 5px; background: #fafafa; border: 1px solid #888; position: absolute; top: -20px; right: 10px; opacity: .8; }\n" +
                        ".visualize .visualize-title { display: block; color: #333; margin-bottom: 3px;  font-size: 1.1em; }\n" +
                        ".visualize ul.visualize-key { list-style: none;  }\n" +
                        ".visualize ul.visualize-key li { list-style: none; float: left; margin-right: 10px; padding-left: 10px; position: relative;}\n" +
                        ".visualize ul.visualize-key .visualize-key-color { width: 6px; height: 6px; left: 0; position: absolute; top: 50%; margin-top: -3px;  }\n" +
                        ".visualize ul.visualize-key .visualize-key-label { color: #000; }\n" +
                        "\n" +
                        "/*line,bar, area labels*/\n" +
                        ".visualize-labels-x,.visualize-labels-y { position: absolute; left: 0; top: 0; list-style: none; }\n" +
                        ".visualize-labels-x li, .visualize-labels-y li { position: absolute; bottom: 0; }\n" +
                        ".visualize-labels-x li span.label, .visualize-labels-y li span.label { position: absolute; color: #555;  }\n" +
                        ".visualize-labels-x li span.line, .visualize-labels-y li span.line {  position: absolute; border: 0 solid #ccc; }\n" +
                        ".visualize-labels-x li { height: 100%; }\n" +
                        ".visualize-labels-x li span.label { top: 100%; margin-top: 5px; }\n" +
                        ".visualize-labels-x li span.line { border-left-width: 1px; height: 100%; display: block; }\n" +
                        ".visualize-labels-x li span.line { border: 0;} /*hide vertical lines on area, line, bar*/\n" +
                        ".visualize-labels-y li { width: 100%;  }\n" +
                        ".visualize-labels-y li span.label { right: 100%; margin-right: 5px; display: block; width: 100px; text-align: right; }\n" +
                        ".visualize-labels-y li span.line { border-top-width: 1px; width: 100%; }\n" +
                        ".visualize-bar .visualize-labels-x li span.label { width: 100%; text-align: center; }\n"+

                        ".visualize { margin: 60px 0 0 30px; padding: 70px 40px 90px; background: #ccc url(../images/chartbg-vanilla.png) top repeat-x; border: 1px solid #ddd; -moz-border-radius: 12px; -webkit-border-radius: 12px; border-radius: 12px; }\n" +
                        ".visualize canvas { border: 1px solid #aaa; margin: -1px; background: #fff; }\n" +
                        ".visualize-labels-x, .visualize-labels-y { top: 70px; left: 40px; z-index: 100; }\n" +
                        ".visualize-pie .visualize-labels { position: absolute; top: 70px; left: 40px; }\n" +
                        ".visualize-labels-x li span.label, .visualize-labels-y li span.label { color: #444; font-size: 7px; padding-right: 5px; }\n" +
                        ".visualize-labels-y li span.line { border-style: solid;  opacity: .7; }\n" +
                        ".visualize .visualize-info { border: 0; position: static;  opacity: 1; background: none; }\n" +
                        ".visualize .visualize-title { position: absolute; top: 20px; color: #333; margin-bottom: 0; left: 20px; font-size: 2.1em; font-weight: bold; }\n" +
                        ".visualize ul.visualize-key { position: absolute; bottom: 15px; background: #eee; z-index: 10; padding: 10px 0; color: #aaa; width: 100%; left: 0;  }\n" +
                        ".visualize ul.visualize-key li { font-size: 1.2em;  margin-left: 20px; padding-left: 18px; }\n" +
                        ".visualize ul.visualize-key .visualize-key-color { width: 10px; height: 10px;  margin-top: -4px; }\n" +
                        ".visualize ul.visualize-key .visualize-key-label { color: #333; }"
                );
                buf.append("</style>");
                buf.append("<script type=\"text/javascript\" src=\"/TrackStudio/html/visualize/jquery.min.js\"></script>");
                buf.append("<script type=\"text/javascript\" src=\"/TrackStudio/html/visualize/visualize.jQuery.js\"></script>");
                buf.append("<table id=\"statesdistribution\" style=\"display: none\">");
                buf.append("<caption>Распределение состояний задач</caption>");
        buf.append("<tr>");
                buf.append("<th scope=\"row\">");
                    buf.append("Состояния");
                    buf.append("</th>");
                    buf.append("<td>");
                    buf.append("</td>");
                 buf.append("</tr>");
                for (SecuredStatusBean u :states.keySet()){
                buf.append("<tr>");
                buf.append("<th scope=\"row\">");
                    buf.append(u.getName());
                    buf.append("</th>");
                    buf.append("<td>");
                    buf.append(states.get(u));
                    buf.append("</td>");
                 buf.append("</tr>");
                }

                buf.append("</table>");
                buf.append("<script>");
                buf.append("$('table#statesdistribution').visualize({type: 'pie', width: '600px', height: '600px'});");
                buf.append("</script>");

                return buf.toString();
    }
}
