// Path: code/api/src/main/java/ar/edu/itba/tpf/chatterbot/service/LoggingService.java
// public interface LoggingService {
// 
//     /**
//      * Almacena una conversacion.
//      * 
//      * @param chat Conversación que se desea almacenar.
//      */
//     public void persistChat(Chat chat);
// 
//     /**
//      * Obtiene un histograma con la cantidad de chats por dia.
//      * 
//      * @param intervalCriteria Intervalo en el que se realiza la búsqueda.
//      * @return Mapa con la cantidad de chats realizados en cada fecha.
//      */
//     public Map<Date, Long> getChatsPerDay(IntervalCriteria intervalCriteria);
// 
//     /**
//      * Obtiene el porcentaje de chats que fueron atendidos en forma satisfactoria.
//      * 
//      * @param intervalCriteria Intervalo de fechas en la que se realiza la búsqueda.
//      * @return Un arreglo de long indicando, el número de chats successful y el número total de chats.
//      */
//     public Long[] getSuccessfulChatsRatio(IntervalCriteria intervalCriteria);
// 
//     /**
//      * Obtiene un histograma con la cantidad de chats de diferentes duraciones.
//      * 
//      * @param intervalCriteria Intervalo de fechas en la que se realiza la búsqueda.
//      * @return Mapa con la cantidad de chats que duraron diferente cantidad de minutos.
//      */
//     public Map<String, Long> getAverageChatTime(IntervalCriteria intervalCriteria);
// 
//     /**
//      * Obtiene todos los chats que satisfacen un criterio de búsqueda.
//      * 
//      * @param loggingCriteria Criterio de búsqueda que contiene palabras clave.
//      * @return Colección con todos los chats cuyo log tiene uno o más de las palabras clave que se indican en el
//      *         criterio de búsqueda.
//      */
//     public Collection<Chat> getChats(LoggingCriteria loggingCriteria);
// 
//     /**
//      * Almacena un error ocurrido en la aplicación.
//      * 
//      * @param errorLog Información del error ocurrido.
//      */
//     public void persistErrorLog(ErrorLog errorLog);
// 
//     /**
//      * Elimina un ErrorLog.
//      * 
//      * @param server ErrorLog que se desea eliminar.
//      */
//     public void removeErrorLog(ErrorLog errorLog);
// 
//     /**
//      * Obtiene todos los errores ocurridos en un determinado intervalo de tiempo.
//      * 
//      * @param intervalCriteria Intervalo de tiempo en el cual buscar errores.
//      * @return Colección de errores ocurridos en dicho intervalo.
//      */
//     public Collection<ErrorLog> getErrorLogs(IntervalCriteria intervalCriteria);
// 
//     /**
//      * Obtiene los nodos hoja del árbol de consultas y la cantidad de veces que fueron visitados en el intervalo dado.
//      * 
//      * @param intervalCriteria Intervalo en el cual hacer la consulta.
//      * @return Listado de nodos con la cantidad de veces que fueron visitados.
//      */
//     public Map<String, Long> getMostVisitedNodes(IntervalCriteria intervalCriteria);
// }
// 
// Path: code/api/src/main/java/ar/edu/itba/tpf/chatterbot/support/IntervalCriteria.java
// public class IntervalCriteria {
//     private Date from;
//     private Date to;
// 
//     /**
//      * Crea un nuevo criterio de búsqueda completando la fecha de comienzo y fin.
//      * 
//      * @param from Fecha inicial.
//      * @param to Fecha final.
//      */
//     public IntervalCriteria(Date from, Date to) {
//         super();
//         this.from = from;
//         this.to = to;
//     }
// 
//     /**
//      * @return Fecha inicial.
//      */
//     public Date getFrom() {
//         return from;
//     }
// 
//     /**
//      * @param from Fecha inicial.
//      * @return this.
//      */
//     public IntervalCriteria setFrom(Date from) {
//         this.from = from;
//         return this;
//     }
// 
//     /**
//      * @return Fecha final.
//      */
//     public Date getTo() {
//         return to;
//     }
// 
//     /**
//      * @param to Fecha final.
//      * @return this.
//      */
//     public IntervalCriteria setTo(Date to) {
//         this.to = to;
//         return this;
//     }
// }


import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.AbstractDataset;
import org.springframework.beans.factory.annotation.Required;
import ar.edu.itba.tpf.chatterbot.service.LoggingService;
import ar.edu.itba.tpf.chatterbot.support.IntervalCriteria;
package ar.edu.itba.tpf.chatterbot.web.charts;




public class ChatsCountChart extends ReportChart {

    private LoggingService loggingService;
    private DefaultCategoryDataset dataset = null;

    public ChatsCountChart() {
        /* No tocar este nombre que se utiliza para identificar al gráfico. */
        this.chartName = "chats_count";
        this.chartType = "bar";
        this.xLabelName = "días";
        this.yLabelName = "cantidad de chats";
        this.chartDescription = "Reporte de cantidad de chats por día";
        this.width = 450;
        this.height = 300;
    }

    @Override
    public AbstractDataset getDataSet() {
        return this.dataset;
    }

    @Required
// Path: code/api/src/main/java/ar/edu/itba/tpf/chatterbot/service/LoggingService.java
// public interface LoggingService {
// 
//     /**
//      * Almacena una conversacion.
//      * 
//      * @param chat Conversación que se desea almacenar.
//      */
//     public void persistChat(Chat chat);
// 
//     /**
//      * Obtiene un histograma con la cantidad de chats por dia.
//      * 
//      * @param intervalCriteria Intervalo en el que se realiza la búsqueda.
//      * @return Mapa con la cantidad de chats realizados en cada fecha.
//      */
//     public Map<Date, Long> getChatsPerDay(IntervalCriteria intervalCriteria);
// 
//     /**
//      * Obtiene el porcentaje de chats que fueron atendidos en forma satisfactoria.
//      * 
//      * @param intervalCriteria Intervalo de fechas en la que se realiza la búsqueda.
//      * @return Un arreglo de long indicando, el número de chats successful y el número total de chats.
//      */
//     public Long[] getSuccessfulChatsRatio(IntervalCriteria intervalCriteria);
// 
//     /**
//      * Obtiene un histograma con la cantidad de chats de diferentes duraciones.
//      * 
//      * @param intervalCriteria Intervalo de fechas en la que se realiza la búsqueda.
//      * @return Mapa con la cantidad de chats que duraron diferente cantidad de minutos.
//      */
//     public Map<String, Long> getAverageChatTime(IntervalCriteria intervalCriteria);
// 
//     /**
//      * Obtiene todos los chats que satisfacen un criterio de búsqueda.
//      * 
//      * @param loggingCriteria Criterio de búsqueda que contiene palabras clave.
//      * @return Colección con todos los chats cuyo log tiene uno o más de las palabras clave que se indican en el
//      *         criterio de búsqueda.
//      */
//     public Collection<Chat> getChats(LoggingCriteria loggingCriteria);
// 
//     /**
//      * Almacena un error ocurrido en la aplicación.
//      * 
//      * @param errorLog Información del error ocurrido.
//      */
//     public void persistErrorLog(ErrorLog errorLog);
// 
//     /**
//      * Elimina un ErrorLog.
//      * 
//      * @param server ErrorLog que se desea eliminar.
//      */
//     public void removeErrorLog(ErrorLog errorLog);
// 
//     /**
//      * Obtiene todos los errores ocurridos en un determinado intervalo de tiempo.
//      * 
//      * @param intervalCriteria Intervalo de tiempo en el cual buscar errores.
//      * @return Colección de errores ocurridos en dicho intervalo.
//      */
//     public Collection<ErrorLog> getErrorLogs(IntervalCriteria intervalCriteria);
// 
//     /**
//      * Obtiene los nodos hoja del árbol de consultas y la cantidad de veces que fueron visitados en el intervalo dado.
//      * 
//      * @param intervalCriteria Intervalo en el cual hacer la consulta.
//      * @return Listado de nodos con la cantidad de veces que fueron visitados.
//      */
//     public Map<String, Long> getMostVisitedNodes(IntervalCriteria intervalCriteria);
// }
// 
// Path: code/api/src/main/java/ar/edu/itba/tpf/chatterbot/support/IntervalCriteria.java
// public class IntervalCriteria {
//     private Date from;
//     private Date to;
// 
//     /**
//      * Crea un nuevo criterio de búsqueda completando la fecha de comienzo y fin.
//      * 
//      * @param from Fecha inicial.
//      * @param to Fecha final.
//      */
//     public IntervalCriteria(Date from, Date to) {
//         super();
//         this.from = from;
//         this.to = to;
//     }
// 
//     /**
//      * @return Fecha inicial.
//      */
//     public Date getFrom() {
//         return from;
//     }
// 
//     /**
//      * @param from Fecha inicial.
//      * @return this.
//      */
//     public IntervalCriteria setFrom(Date from) {
//         this.from = from;
//         return this;
//     }
// 
//     /**
//      * @return Fecha final.
//      */
//     public Date getTo() {
//         return to;
//     }
// 
//     /**
//      * @param to Fecha final.
//      * @return this.
//      */
//     public IntervalCriteria setTo(Date to) {
//         this.to = to;
//         return this;
//     }
// }


// Path: code/web/src/main/java/ar/edu/itba/tpf/chatterbot/web/charts/ChatsCountChart.java
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.AbstractDataset;
import org.springframework.beans.factory.annotation.Required;
import ar.edu.itba.tpf.chatterbot.service.LoggingService;
import ar.edu.itba.tpf.chatterbot.support.IntervalCriteria;

package ar.edu.itba.tpf.chatterbot.web.charts;




public class ChatsCountChart extends ReportChart {

    private LoggingService loggingService;
    private DefaultCategoryDataset dataset = null;

    public ChatsCountChart() {
        /* No tocar este nombre que se utiliza para identificar al gráfico. */
        this.chartName = "chats_count";
        this.chartType = "bar";
        this.xLabelName = "días";
        this.yLabelName = "cantidad de chats";
        this.chartDescription = "Reporte de cantidad de chats por día";
        this.width = 450;
        this.height = 300;
    }

    @Override
    public AbstractDataset getDataSet() {
        return this.dataset;
    }

    @Required
    public void setLoggingService(LoggingService loggingService) {