/*
 * 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 pe.siso.horario.Servlets;

import java.io.IOException;
import java.io.PrintWriter;
//import java.net.Authenticator;
import java.util.*;

import javax.mail.*;
import javax.mail.internet.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import pe.siso.horario.Beans.Docente;
import pe.siso.horario.Services.DisponibilidadServices;
import pe.siso.horario.Services.DocenteServices;

/**
 *
 * @author fcelestino
 */
public class ServletMail extends HttpServlet {

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String param = request.getParameter("Accion");
        if ("enviarEmail".equals(param)) {
            enviarEmail(request, response);
        }
    }

    private void enviarEmail(HttpServletRequest request, HttpServletResponse response) throws IOException {
//        AlumnoServices servicio=new AlumnoServices();
        response.setContentType("text/html");
        PrintWriter pw = response.getWriter();
//        
        DocenteServices servicios = new DocenteServices();
//        DisponibilidadServices serviciosDD = new DisponibilidadServices();
        Docente docente = new Docente();
        String codDoc = request.getParameter("codDoc");
        String correo = request.getParameter("correo");
        String nombrePeriodo = request.getParameter("nombrePeriodo");
        String periodo = request.getParameter("codigoPeriodo");
        DisponibilidadServices serviciosDD = new DisponibilidadServices();
        String codArea = request.getParameter("codArea");
        
        docente = servicios.NombreDocente(codDoc);
        System.out.println("hola");
        String mensaje = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"></head>";

        mensaje += "<body><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" style=\"font-size:12.8px;border-collapse:collapse\">"
                + "<tbody>"
                + "<tr>"
                + "<td width=\"283\" style=\"width:212.25pt;padding:0cm 5.4pt\">"
                + "<p>Estimado(a) " + docente.getApe_pro() + ", " + docente.getNom_pro() + ",</p>"
                + "</td>"
                + "</tr>"
                + "<tr>"
                + "<td width=\"283\" style=\"width:212.25pt;padding:0cm 5.4pt\">"
                + "<p>Muchas gracias por registrar sus datos y su disponibilidad para el año electivo "+nombrePeriodo+".</p>"
                + "</td>"
                + "</tr>"
                + "<tr>"
                + " <td>";

        int t_doc = 0;
        int p_doc = 0;

        if (codArea.equals("1")) {
            t_doc = 2;
            p_doc = 5;
        } else if (codArea.equals("2")) {
            t_doc = 2;
            p_doc = 2;
        } else if (codArea.equals("3")) {
            t_doc = 2;
            p_doc = 3;
        } else if (codArea.equals("4")) {
            t_doc = 2;
            p_doc = 4;
        }

        docente = servicios.NombreDocente(codDoc);
        String cadenaDia = serviciosDD.ConsultaDisponibilidad(codDoc, periodo);
        String cadena = "";

        String TM = "";
        String TT = "";
        String TN = "";

        String[] arrayGrupo = cadenaDia.split("-");
        for (int i = 0; i < arrayGrupo.length; i++) {
            String[] arrayTD = arrayGrupo[i].split("#");
            if (arrayTD[0].equals("1")) {
                if (TM.equals("")) {
                    TM += "0-" + arrayTD[1];
                } else {
                    TM += "-" + arrayTD[1];
                }

            } else if (arrayTD[0].equals("2")) {
                if (TT.equals("")) {
                    TT += "0-" + arrayTD[1];
                } else {
                    TT += "-" + arrayTD[1];
                }
            } else if (arrayTD[0].equals("3")) {
                if (TN.equals("")) {
                    TN += "0-" + arrayTD[1];
                } else {
                    TN += "-" + arrayTD[1];
                }
            }
        }

        String[] arrayDisponibilidad = {TM, TT, TN};

        String[] arrayHora = {"07:50 a 14:30", "15:00 a 19:00 ", "19:00 a 22:00"};
        String[] arrayTurno = {"MAÑANA", "TARDE", "NOCHE"};

        mensaje +="<div style=\"\">"
                + "                       <div>"
                + "                           <div class=\"dataTables_wrapper form-inline no-footer\" id=\"sample-table-2_wrapper\">"
                + "                               <table class=\"\" id=\"sample-table-2\" role=\"grid\" aria-describedby=\"sample-table-2_info\" >"
                + "                                   <thead style=\"background-color: #093765;color: white;\">"
                + "                                       <tr role=\"row\">"
                + "                                           <th style='padding: 8px;' tabindex=\"0\" class=\"center\" rowspan=\"1\" colspan=\"1\" >HORAS</th>"
                + "                                           <th style='padding: 8px;'tabindex=\"0\" class=\"center\" rowspan=\"1\" colspan=\"1\">TURNO</th>"
                + "                                           <th style='padding: 8px;' tabindex=\"0\" class=\"center\" rowspan=\"1\" colspan=\"1\">LUNES</th>"
                + "                                           <th style='padding: 8px;' tabindex=\"0\" class=\"center\" rowspan=\"1\" colspan=\"1\">MARTES</th>"
                + "                                           <th style='padding: 8px;' tabindex=\"0\" class=\"center\" rowspan=\"1\" colspan=\"1\">MIÉRCOLES</th>"
                + "                                           <th style='padding: 8px;' tabindex=\"0\" class=\"center\" rowspan=\"1\" colspan=\"1\">JUEVES</th>"
                + "                                           <th style='padding: 8px;' tabindex=\"0\" class=\"center\" rowspan=\"1\" colspan=\"1\">VIERNES</th>"
                + "                                           <th style='padding: 8px;' tabindex=\"0\" class=\"center\" rowspan=\"1\" colspan=\"1\">SÁBADO</th>"
                + "                                       </tr>"
                + "                                   </thead>"
                + "                                   <tbody>";

        int dato = 0;
        int turno = 0;
        int posicion = 1;
        int dia = 0;

        for (int i = 0; i < 3; i++) {
            turno = i + 1;
            mensaje +="<tr style=\"vertical-align: middle;\">"
                    + "<td align='center'  style=\"padding:8px;background: #083866;color: #fff;\">" + arrayHora[i] + "</td>"
                    + "<td style=\"padding:8px;background: #083866;color: #fff;\">" + arrayTurno[i] + "</td>";
            for (int j = 1; j <= 6; j++) {
                //int cantidad=0;
                if (arrayDisponibilidad[i] == "") {
                    if (t_doc == turno && p_doc == j) {
                        mensaje +="<td align='center' style='background-color:padding:8px;' valign='middle'>NO</td>";
                    } else {
                        mensaje +="<td align='center' style='padding:8px;' valign='middle'>NO</td>";
                    }

                } else {
                    String[] arrayDias = arrayDisponibilidad[i].split("-");
                    for (int d = 0; d < arrayDias.length; d++) {
                        dia = Integer.parseInt(arrayDias[d]);
                        if (j == dia) {
                            dato = dato + 1;
                        } else {
                            dato = dato + 0;
                        }

                    }
                    int cantidad = serviciosDD.asignadoDisponibilidad(codDoc, j, turno, periodo);
                    System.out.println("cantidad====> " + cantidad);
                    if (cantidad > 0) {
                        if (dato == 1) {
                            if (cadena.equals("")) {
                                cadena = turno + "#" + j;
                            } else {
                                cadena += "-" + turno + "#" + j;
                            }

                            if (t_doc == turno && p_doc == j) {
                                mensaje +="<td align='center' valign='middle' style='background-color:#9fcef8;padding:8px;'>SI</td>";
                            } else {
                                mensaje +="<td align='center' valign='middle' style='background-color:#9fcef8;padding:8px;'>SI</td>";
                            }

                        } else {

                            if (t_doc == turno && p_doc == j) {
                                mensaje +="<td align='center' style='background-color:padding:8px;' valign='middle'>NO</td>";
                            } else {
                                mensaje +="<td align='center' style='padding:8px;' valign='middle'>NO</td>";
                            }

                        }
                    } else {
                        if (dato == 1) {

                            if (t_doc == turno && p_doc == j) {
                                mensaje +="<td align='center' style='background-color:#9fcef8;padding:8px;' valign='middle'>SI</td>";
                            } else {
                                mensaje +="<td align='center' style='background-color:#9fcef8;padding:8px;' valign='middle'>SI</td>";
                            }

                        } else {

                            if (t_doc == turno && p_doc == j) {
                                mensaje +="<td align='center' style='padding:8px;' valign='middle'>NO</td>";
                            } else {
                                mensaje +="<td align='center' style='padding:8px;' valign='middle'>NO</td>";
                            }

                        }
                    }
                    dato = 0;

                }
                posicion++;

            }

            mensaje +="</tr> ";

        }
        // PG000019
        mensaje +="               </tbody>"
                + "           </table>"
                + "       </div>"
                + "   </div>"
                + "</div>";
        
        mensaje += "   </td>"
                + " </tr>"
                + "<tr>"
                + "<td width=\"283\" style=\"width:212.25pt;padding:0cm 5.4pt\">"
                + "<p>Cualquier consulta enviar un correo a coordinador.academico@sacooliveros.edu.pe.</p>"
                + "</td>"
                + "</tr>"     
                + "<tr>"
                + "<td width=\"652\" colspan=\"2\" style=\"width:488.65pt;padding:0cm 5.4pt\">"
                + "<p><b><i><span style=\"font-size:18pt;font-family:Webdings;color:rgb(118,146,60);\">P</span></i></b><b><i>"
                + "<span style=\"font-size:10pt;color:rgb(0,176,80)\">&nbsp;</span></i></b><b>"
                + "<span style=\"font-size:8pt;font-family:Arial,sans-serif;color:rgb(89,89,89)\">¡Gracias!</span></b>"
                + "<span style=\"font-size:8pt;font-family:Arial,sans-serif;color:rgb(89,89,89)\">por utilizar la comunicación electrónica.</span>"
                + "<span style=\"font-size:8pt;font-family:Arial,sans-serif;color:rgb(42,42,42)\"><br>"
                + "</span><span style=\"font-size:8pt;font-family:Arial,sans-serif;color:rgb(89,89,89)\">"
                + "Te sugiero que no imprimas este e-mail a menos que lo consideres muy necesario.</span>"
                + "<span style=\"font-size:8pt;font-family:Arial,sans-serif;color:rgb(42,42,42)\"><br></span>"
                + "<span style=\"font-size:8pt;font-family:Arial,sans-serif;color:rgb(89,89,89)\">Ahorra papel, salva un árbol, el medio ambiente te lo agradecerá.</span></p>"
                + "</td>"
                + "</tr>"
                + "</tbody>"
                + "</table>";
        mensaje += "</body></html>";
        //codigo envio de correo
        String from = "sistemas.sacooliveros@gmail.com";
        String to = correo;
        String copia = "coordinador.academico@sacooliveros.edu.pe";
        String subject = "SACO OLIVEROS - COFIRMACIÓN DE DISPONIBILIDAD REGISTRADA";

        String login = "sistemas.sacooliveros@gmail.com";
        String password = "cjvhhanjsmyadsxu";// key autorizado

        try {
            Properties props = new Properties();

            props.setProperty("mail.host", "smtp.gmail.com");
            props.setProperty("mail.smtp.port", "587");
            props.setProperty("mail.smtp.auth", "true");
            props.setProperty("mail.smtp.starttls.enable", "true");

            Authenticator auth = new SMTPAuthenticator(login, password);

            Session session = Session.getInstance(props, auth);
            session.setDebug(true);
            MimeMessage msg = new MimeMessage(session);
            msg.setContent(mensaje, "text/html");
            msg.setSubject(subject);
            msg.setFrom(new InternetAddress(from));
            msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            msg.addRecipient(Message.RecipientType.BCC, new InternetAddress(copia));

            session.getTransport("smtp");
            Transport t = session.getTransport("smtp");
            t.connect("smtp.gmail.com", login, password);
            t.sendMessage(msg, msg.getAllRecipients());

            pw.print("1");

        } catch (AuthenticationFailedException ex) {
            System.out.println("mensaje no AuthenticationFailedException");
        } catch (AddressException ex) {
            System.out.println("mensaje no AddressException");
        } catch (MessagingException ex) {
            System.err.println(ex.getMessage());
            System.out.println("mensaje no MessagingException ");
        }

    }

    private class SMTPAuthenticator extends Authenticator {

        private PasswordAuthentication authentication;

        public SMTPAuthenticator(String login, String password) {
            authentication = new PasswordAuthentication(login, password);
        }

        protected PasswordAuthentication getPasswordAuthentication() {
            return authentication;
        }
    }

}
