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 java.util.Locale;
import java.util.ResourceBundle;

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.homebanking.DataManage;
import com.fitbank.homebanking.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.setCharacterEncoding("iso88591");
        resp.setContentType("text/html; charset=windows-1252");
        resp.setHeader("Pragma", "no-cache");
        resp.setHeader("Cache-Control", "no-cache");
                
        PrintWriter out=resp.getWriter();
        try{  				
          	String language = (String)req.getSession().getAttribute("i18n");
          	Locale locale = new Locale(language);
            ResourceBundle res = ResourceBundle.getBundle("i18n", locale);
            String text = res.getString("email.text");
            String button = res.getString("buttonMail.text");
            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"), text));
            }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");
                System.out.println(":::::::::::::::::::::::::::::: 6");
                MailMessage mm = new MailMessage(subject,content,to);
                System.out.println(":::::::::::::::::::::::::::::: 7");
                mm.setTo(to);
                System.out.println(":::::::::::::::::::::::::::::: 8");
                mm.addAttachment(data.getName(),data.getPath());
                System.out.println(":::::::::::::::::::::::::::::: 9");
                mm.send();
                System.out.println(":::::::::::::::::::::::::::::: 10");
                out.println("<center>" + text + "</center>");
                out.println("<p align=\"center\"><button dojoType=\"dijit.form.Button\" onClick=\"top._mail.hide();\">"+ button +"</button></p>");
               System.out.println(":::::::::::::::::::::::::::::: 11");    
            }
        }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);
    	Detail detail = (Detail) req.getSession().getAttribute("repDetail");//dm.get(req.getParameter("report"));
		Report rep = new Report(detail, path, rType, detail.toXml());
		String name = HBParam.getInstance().getStringValue("mail.name");
			String pdfPath=this.path+"/"+ name +".pdf";
			OutputStream out=new FileOutputStream(pdfPath);
			try{
			 rep.executeReport(out);
			}finally{
				out.close();
			}
			return  new MailData(pdfPath, name +".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;
	}
	 
}