/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ryuuji.api;

import java.io.File;
import java.util.HashMap;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import logica.reportes.ReporteApoderado;
import logica.reportes.ReporteApoderadosMasEstudiantes;
import logica.reportes.ReporteAsistenciaBajo;
import logica.reportes.ReporteAsistenciaYNotas;
import logica.reportes.ReporteNotasProfesor;
import logica.reportes.ReportePlanificaciones;
import logica.reportes.ReporteReprobando;
import orm.Apoderado;
import orm.Estudiante;
import orm.Profesor;

/**
 *
 * @author ryuuji
 */
@WebService(serviceName = "Reportes")
public class ReportesService {

    /**
     * Reporte que entrega los datos de notas, planificaciones y anotaciones de los alumnos de un apoderado
     *
     * @param xslPath ruta en la cual se encuentran los xsl para la transformacion
     * @param xml Si se guardara el xml
     * @param json Si se guardara el json
     * @param html Si se guardara el html
     * @param xlsx Si se guardara el xlsx
     * @param docx Si se guardara el docx
     * @return un hashmap con los reportes generados en el
     */
    @WebMethod(operationName = "generarReporteApoderado")
    public HashMapWrapper generarReporteApoderado(@WebParam(name = "xslPath") File xslPath, @WebParam(name = "xml") boolean xml, @WebParam(name = "json") boolean json, @WebParam(name = "html") boolean html, @WebParam(name = "xlsx") boolean xlsx, @WebParam(name = "docx") boolean docx) {
        File file = new File("TestFile.txt");
        System.out.println(file.getAbsolutePath());
        file.delete();
        return new HashMapWrapper(ReporteApoderado.generar(xslPath, xml, json, html, xlsx, docx));
    }

    /**
     * Reporte que almacena los apoderados que tienen mas de un estudiante en el colegio
     *
     * @param xslPath ruta en la cual se encuentran los xsl para la transformacion
     * @param xml Si se guardara el xml
     * @param json Si se guardara el json
     * @param html Si se guardara el html
     * @param xlsx Si se guardara el xlsx
     * @param docx Si se guardara el docx
     * @return un hashmap con los reportes generados en el
     */
    @WebMethod(operationName = "generarReporteApoderadosMasEstudiantes")
    public HashMapWrapper generarReporteApoderadosMasEstudiantes(@WebParam(name = "xslPath") File xslPath, @WebParam(name = "xml") boolean xml, @WebParam(name = "json") boolean json, @WebParam(name = "html") boolean html, @WebParam(name = "xlsx") boolean xlsx, @WebParam(name = "docx") boolean docx) {
        ReporteApoderadosMasEstudiantes reporte = new ReporteApoderadosMasEstudiantes();
        return new HashMapWrapper(reporte.generar(xslPath, xml, json, html, xlsx, docx));
    }

    /**
     * Reporte que almacena los estudiantes que tienen una asistencia bajo el porcentaje ingresado
     *
     * @param xslPath ruta en la cual se encuentran los xsl para la transformacion
     * @param xml Si se guardara el xml
     * @param json Si se guardara el json
     * @param html Si se guardara el html
     * @param xlsx Si se guardara el xlsx
     * @param docx Si se guardara el docx
     * @param porcentaje Porcentaje maximo para considerar que tiene una baja asistencia
     * @return un hashmap con los reportes generados en el
     */
    @WebMethod(operationName = "generarReporteAsistenciaBajo")
    public HashMapWrapper generarReporteAsistenciaBajo(@WebParam(name = "porcentaje") int porcentaje, @WebParam(name = "xslPath") File xslPath, @WebParam(name = "xml") boolean xml, @WebParam(name = "json") boolean json, @WebParam(name = "html") boolean html, @WebParam(name = "xlsx") boolean xlsx, @WebParam(name = "docx") boolean docx) {
        ReporteAsistenciaBajo reporte = new ReporteAsistenciaBajo(porcentaje);
        return new HashMapWrapper(reporte.generar(xslPath, xml, json, html, xlsx, docx));
    }

    /**
     * Reporte que almacena la asistencia y las notas de un estudiante
     *
     * @param xslPath ruta en la cual se encuentran los xsl para la transformacion
     * @param xml Si se guardara el xml
     * @param json Si se guardara el json
     * @param html Si se guardara el html
     * @param xlsx Si se guardara el xlsx
     * @param docx Si se guardara el docx
     * @param estudiante El estudiante al cual se le extraeran los datos
     * @return un hashmap con los reportes generados en el
     */
    @WebMethod(operationName = "generarReporteAsistenciaYNotas")
    public HashMapWrapper generarReporteAsistenciaYNotas(@WebParam(name = "estudiante") Estudiante estudiante, @WebParam(name = "xslPath") File xslPath, @WebParam(name = "xml") boolean xml, @WebParam(name = "json") boolean json, @WebParam(name = "html") boolean html, @WebParam(name = "xlsx") boolean xlsx, @WebParam(name = "docx") boolean docx) {
        ReporteAsistenciaYNotas reporte = new ReporteAsistenciaYNotas(estudiante);
        return new HashMapWrapper(reporte.generar(xslPath, xml, json, html, xlsx, docx));
    }

    /**
     * Reporte que almacena las notas ingresadas en las asignaturas que imparte el profesor seleccionado
     *
     * @param xslPath ruta en la cual se encuentran los xsl para la transformacion
     * @param xml Si se guardara el xml
     * @param json Si se guardara el json
     * @param html Si se guardara el html
     * @param xlsx Si se guardara el xlsx
     * @param docx Si se guardara el docx
     * @param profesor Profesor del que se extraeran los datos
     * @return un hashmap con los reportes generados en el
     */
    @WebMethod(operationName = "generarReporteNotasProfesor")
    public HashMapWrapper generarReporteNotasProfesor(@WebParam(name = "profesor") Profesor profesor, @WebParam(name = "xslPath") File xslPath, @WebParam(name = "xml") boolean xml, @WebParam(name = "json") boolean json, @WebParam(name = "html") boolean html, @WebParam(name = "xlsx") boolean xlsx, @WebParam(name = "docx") boolean docx) {
        ReporteNotasProfesor reporte = new ReporteNotasProfesor(profesor);
        return new HashMapWrapper(reporte.generar(xslPath, xml, json, html, xlsx, docx));
    }

    /**
     * Reporte que almacena las planificaciones de los estudiantes de un apoderado
     *
     * @param xslPath ruta en la cual se encuentran los xsl para la transformacion
     * @param xml Si se guardara el xml
     * @param json Si se guardara el json
     * @param html Si se guardara el html
     * @param xlsx Si se guardara el xlsx
     * @param docx Si se guardara el docx
     * @param apoderado Apoderado del cual son los estudiantes
     * @return un hashmap con los reportes generados en el
     */
    @WebMethod(operationName = "generarReportePlanificaciones")
    public HashMapWrapper generarReportePlanificaciones(@WebParam(name = "apoderado") Apoderado apoderado, @WebParam(name = "xslPath") File xslPath, @WebParam(name = "xml") boolean xml, @WebParam(name = "json") boolean json, @WebParam(name = "html") boolean html, @WebParam(name = "xlsx") boolean xlsx, @WebParam(name = "docx") boolean docx) {
        ReportePlanificaciones reporte = new ReportePlanificaciones(apoderado);
        return new HashMapWrapper(reporte.generar(xslPath, xml, json, html, xlsx, docx));
    }

    /**
     * Reporte que almacena los estudiantes que estan reprobando en el sistema.
     *
     * @param xslPath ruta en la cual se encuentran los xsl para la transformacion
     * @param xml Si se guardara el xml
     * @param json Si se guardara el json
     * @param html Si se guardara el html
     * @param xlsx Si se guardara el xlsx
     * @param docx Si se guardara el docx
     * @return un hashmap con los reportes generados en el
     */
    @WebMethod(operationName = "generarReporteReprobando")
    public HashMapWrapper generarReporteReprobando(@WebParam(name = "xslPath") File xslPath, @WebParam(name = "xml") boolean xml, @WebParam(name = "json") boolean json, @WebParam(name = "html") boolean html, @WebParam(name = "xlsx") boolean xlsx, @WebParam(name = "docx") boolean docx) {
        ReporteReprobando reporte = new ReporteReprobando();
        return new HashMapWrapper(reporte.generar(xslPath, xml, json, html, xlsx, docx));
    }

}
