package com.fitbank.servlet;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.text.MessageFormat;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.fitbank.common.MailMessage;
import com.fitbank.dto.management.Detail;
import com.fitbank.web.DataManage;
import com.fitbank.web.HBParam;
import com.fitbank.report.Report;
import com.fitbank.report.ReportTypes;


public class MailServlet extends HttpServlet{
	private static final long serialVersionUID = 1L;
		private String path;
    @Override
    public void init(ServletConfig config) throws ServletException {
        path=config.getServletContext().getRealPath("/")+"/rep";
        super.init(config);
    }


    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	resp.setHeader("Pragma", "no-cache");
    	resp.setHeader("Cache-Control","no-cache");
    	resp.setCharacterEncoding("iso88591");
  		resp.setContentType("text/html; charset=windows-1252");
        PrintWriter out=resp.getWriter();
      	try{  				
            String contact = req.getParameter("contact");
            if(contact!=null && contact.compareTo("true")==0){
                String subject=this.getParameterName(req, "subject", HBParam.getInstance().getStringValue("mail.subject"));
                String content=HBParam.getInstance().getStringValue("mail.content");
                String message=this.getParameterName(req, "message", HBParam.getInstance().getStringValue("mail.message"));
                content=MessageFormat.format(content, message);
                String to=req.getParameter("to");
                MailMessage mm = new MailMessage(subject,content,to);
                mm.setTo(to);
                mm.send();
                out.println(MessageFormat.format(HBParam.getInstance().getStringValue("mail.content"), "Su mail ha sido enviado"));
            }else{
                MailData data=this.prepareReport(req);
                String subject=this.getParameterName(req, "subject", HBParam.getInstance().getStringValue("mail.subject"));
                String content=HBParam.getInstance().getStringValue("mail.content");
                String message=this.getParameterName(req, "message", HBParam.getInstance().getStringValue("mail.message"));
                content=MessageFormat.format(content, message);
                String to=req.getParameter("to");
                MailMessage mm = new MailMessage(subject,content,to);
                mm.setTo(to);
                mm.addAttachment(data.getName(),data.getPath());
                mm.send();
                out.println("<center>Mail enviado</center>");
                out.println("<script>top._mail.hide();</script>");
            }
        }catch(Exception e){
            out.println("<center>"+e.getMessage()+"</center>");
            e.printStackTrace();  				
        }finally{
            out.close();
        }
    }
    
    private String getParameterName(HttpServletRequest req,String pName,String pDefault){
    	String val=req.getParameter(pName);
    	if(val==null||val.compareTo("")==0){
    		val=pDefault;
    	}
    	return val;
    }
    private MailData prepareReport(HttpServletRequest req) throws Exception{
    	
    	ReportTypes rType=ReportTypes.PDF;
  		
  		DataManage dm=(DataManage)req.getSession().getAttribute(DataManage.KEY);
        String key=getDetailKey(req);
			Detail detail = (Detail)dm.get(key);
			Report rep=new Report(detail,path,rType);
			String pdfPath=this.path+"/"+detail.getUser()+".pdf";
			OutputStream out=new FileOutputStream(pdfPath);
			try{
			 rep.executeReport(out);
			}finally{
				out.close();
			}
			return  new MailData(pdfPath,detail.getUser()+".pdf");
    }
    public String getDetailKey(HttpServletRequest req){
        String key= null;
        if(key == null){
            
         key=   DataManage.DETAIL_KEY;
        String paramKey=req.getParameter("_detail_");
        
        if(paramKey!=null&&paramKey.compareTo("")!=0){
          key=paramKey;
        }else{
            paramKey=(String)req.getSession().getAttribute("_detail_");
            //this.getSession().setAttribute("_detail_","");
            if(paramKey!=null&&paramKey.compareTo("")!=0){
              key=paramKey;
            }
        }
        
    }
        return key;
    }   

}
 class MailData{
	 private String path;
	 private String name;
	 public MailData(String pPath,String pName){
		 this.path=pPath;
		 this.name=pName;
	 }
	public String getPath() {
		return path;
	}
	
	public String getName() {
		return name;
	}
	 
}