package mprj.doerj.caderno.util;

import com.liferay.portal.kernel.exception.SystemException;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

import javax.portlet.ActionRequest;
import javax.portlet.PortletContext;

import org.apache.commons.lang3.time.DateFormatUtils;
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.openpackaging.parts.WordprocessingML.NumberingDefinitionsPart;
import org.docx4j.org.xhtmlrenderer.util.XRLog;


public class CadernoUtil {
	
	public static String ORGAO="";
	public static String TITULO="";

	public static String getDatasCadastradas() throws SystemException, ParseException{
		String  datas = " ";
		Date data = GregorianCalendar.getInstance().getTime();
		String now = DateFormatUtils.format(GregorianCalendar.getInstance(), "dd/MM/yyyy", new Locale("pt-BR"));
		boolean ch=false;
		datas+=  datas.substring(0, datas.length() - 1);
		datas += " ";
		return datas;
	}
	
	public static String tratarString(String textoHtml,String tipo){
		
		
		try{
		
		if(tipo.equals("conteudo")||tipo.equals("conteudoPrimeiraPagina")){
		
			textoHtml = tratarTagsHtml(textoHtml,"p","manterTags");
			textoHtml = tratarTagsHtml(textoHtml,"b","manterTags");
			textoHtml = tratarTagsHtml(textoHtml,"u","manterTags");
			textoHtml = tratarTagsHtml(textoHtml,"span","manterTags");
			textoHtml = tratarTagsHtml(textoHtml,"font","manterTags");
			textoHtml = tratarTagsHtml(textoHtml,"div","manterTags");
			textoHtml = tratarTagsHtml(textoHtml,"sup","manterTags");
			textoHtml = tratarTagsHtml(textoHtml,"blockquote","manterTags");
			
		textoHtml = textoHtml.replaceAll("data:image=&quot;&quot;", "");
		textoHtml = textoHtml.replaceAll("\"", "");
		textoHtml = textoHtml.replaceAll("&ndash;", "-");
		textoHtml = textoHtml.replaceAll("&nbsp;", " ");
		textoHtml = textoHtml.replaceAll("&quot;", "'");
		textoHtml = textoHtml.replaceAll("h2", "p");
		textoHtml = textoHtml.replaceAll("h5", "p");
		textoHtml = textoHtml.replaceAll("h1", "p");
		textoHtml = textoHtml.replaceAll("o:p", "p");
		
		String primeirosChar="";
		
		primeirosChar = textoHtml.substring(1, 3);
		
			if (!primeirosChar.equals("<p>")&& !tipo.equals("conteudoPrimeiraPagina")){
				textoHtml = "<p align='JUSTIFY'>" + textoHtml + "</p>";
				
			}
		
			if(tipo.equals("conteudo")){
			textoHtml = "<body><head><style type='" + "text/css'" + ">p{font-family:Spranq eco sans;font-size:12px;} </style></head>" + textoHtml + "<p></p></body>";
			}
		}
		
		if (tipo.equals("titulo")){
			
			textoHtml =textoHtml.toUpperCase(); 
			
			if (textoHtml==null || textoHtml.equals("0")){
				textoHtml="";
			}
			
			
		}
		}catch(Exception e){
			e.printStackTrace();
			
		}
		
		return textoHtml;
		
	}

	public static String tratarTagsHtml(String conteudoHtml, String tag,String acao){
		
		String tagAberta="";
		String tagFechada="";
		int tamanhoTag=0;
		
		if (tag.equals("p")){
			
			tagAberta="<p ";
			tagFechada="<p>";
			tamanhoTag=3;
			
		}
		
		if (tag.equals("b")){
			
			tagAberta="<b ";
			tagFechada="<b>";
			tamanhoTag=3;
			
		}
		
		
		if (tag.equals("u")){
			
			tagAberta="<u ";
			tagFechada="<u>";
			tamanhoTag=3;
			
		}
		
	if (tag.equals("a")){
			
			tagAberta="<a ";
			tagFechada="<a>";
			tamanhoTag=3;
			
		}
		
		if (tag.equals("div")){
			
			tagAberta="<div ";
			tagFechada="<div>";
			tamanhoTag=5;
			
		}
		
		if (tag.equals("sup")){
			
			tagAberta="<sup ";
			tagFechada="<sup>";
			tamanhoTag=5;
			
		}
		
		if (tag.equals("span")){
			
			tagAberta="<span ";
			tagFechada="<span>";
			tamanhoTag=6;
			
		}
		
		if (tag.equals("font")){
			
			tagAberta="<font ";
			tagFechada="<font>";
			tamanhoTag=6;
			
		}
		
		if (tag.equals("blockquote")){
			
			tagAberta="<blockquote ";
			tagFechada="<blockquote>";
			tamanhoTag=12;
			
		}
		
		int len = conteudoHtml.length();
		   String tagP = "";

		    for (int i=0;i<len;i++)
		    {
		    	
		    	if(i+tamanhoTag<len){
		    		tagP = conteudoHtml.substring(i, i+tamanhoTag);
		    		
		    	}else{
		    		tagP = conteudoHtml.substring(i, len);
		    		
		    	}
		        String caracterCorrente="";
		        String strAcumulado="";
		        int indiceInicio = i;
		        if (tagP.equals(tagAberta)){
		        	int indiceFim=indiceInicio+1;
		        	
		        	while (!caracterCorrente.equals(">")){
		        		
		        		strAcumulado = conteudoHtml.substring(indiceInicio,indiceFim);
		        		caracterCorrente = conteudoHtml.substring(indiceFim-1,indiceFim);
		        		indiceFim++;
		        		
		        	}
		        	
		        	if (tag.equals("span")){
		        		conteudoHtml = conteudoHtml.replace(strAcumulado, "");
		        		conteudoHtml = conteudoHtml.replaceAll("</span>", "");
		        		conteudoHtml = conteudoHtml.replaceAll("<span>", "");
		        		i=0;
		        	}else if (tag.equals("font")){
		        		conteudoHtml = conteudoHtml.replace(strAcumulado, "");
		        		conteudoHtml = conteudoHtml.replaceAll("</font>", "");
		        		conteudoHtml = conteudoHtml.replaceAll("<font>", "");
		        		i=0;
		        		
		        	}else if (tag.equals("div")){
		        		conteudoHtml = conteudoHtml.replace(strAcumulado, "");
		        		conteudoHtml = conteudoHtml.replaceAll("</div>", "");
		        		conteudoHtml = conteudoHtml.replaceAll("<div>", "");
		        		i=0;
		        		
		        	}else if (tag.equals("sup")){
		        		conteudoHtml = conteudoHtml.replace(strAcumulado, "");
		        		conteudoHtml = conteudoHtml.replaceAll("</sup>", "");
		        		conteudoHtml = conteudoHtml.replaceAll("<sup>", "");
		        		i=0;	
		        	}else if (tag.equals("a")){	
		        		
		        		if(acao.equals("excluirTags")){
		        			conteudoHtml = conteudoHtml.replace(strAcumulado, "");
			        		conteudoHtml = conteudoHtml.replaceAll("</a>", "");
			        		conteudoHtml = conteudoHtml.replaceAll("<a>", "");
			        		i=0;
		        		}
		        		
		        		
		        	}else{
		        		
		        		if(acao.equals("manterTags")){
		        			conteudoHtml = conteudoHtml.replace(strAcumulado, tagFechada);
		        			
		        		}else{
		        			conteudoHtml = conteudoHtml.replace(strAcumulado, "");
		        		}
		        		i=0;
		        	}
		        	
		        	len = conteudoHtml.length();
		        	
		        }
		    	
		    }
		
		
		return conteudoHtml;
	} 
	public static WordprocessingMLPackage ConverterHTML(String stringFromFile,String orgao,String titulo, ActionRequest actionRequest){
     
		
		PortletContext context = actionRequest.getPortletSession().getPortletContext();
		String baseURL = "file:///" + context.getRealPath("/template");
		//String baseURL = "file:///C:/Users/diogo.souza/Documents/Caderno DO";
      XRLog.setLoggingEnabled(false);
      String unescaped = stringFromFile;

      // Create an empty docx package
		WordprocessingMLPackage wordMLPackage=null;
		try {
			wordMLPackage = WordprocessingMLPackage.createPackage();
		MainDocumentPart DocumentPart = wordMLPackage.getMainDocumentPart();
		
		if(!orgao.equals(ORGAO)){
			
			DocumentPart.addStyledParagraphOfText("Heading1",orgao);
			ORGAO=orgao;
			
			DocumentPart.addStyledParagraphOfText("Heading2",titulo);
			TITULO=titulo;
		}
			
		if(!titulo.equals(TITULO) && orgao.equals(ORGAO)){
			
			DocumentPart.addStyledParagraphOfText("Heading2",titulo);
			TITULO=titulo;
		}
	
		
		NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
		wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
		ndp.unmarshalDefaultNumbering();		
					
		// Convert the XHTML, and add it into the empty docx we made
      XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
      
      XHTMLImporter.setHyperlinkStyle("Heading1");
		wordMLPackage.getMainDocumentPart().getContent().addAll(XHTMLImporter.convert(unescaped, baseURL) );

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    return wordMLPackage;
}
	
	
public static String gerarDataCabecalho(String data) throws ParseException{
	
	String resultado="";
	
	String diaSemanaStr="";
	String dia=data.substring(0,2);
	String mes = data.substring(3, 5);
	String ano = data.substring(6, 10);
	String mesStr="";
	
	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    Date dataConverter = sdf.parse(data);
    GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(dataConverter);
    int diaSemana = gc.get(GregorianCalendar.DAY_OF_WEEK);
    
    if (diaSemana == 1){
    	diaSemanaStr = "Domingo";
    }

    if (diaSemana == 2){
    	diaSemanaStr = "Segunda-feira";
    }
    
    if (diaSemana == 3){
    	diaSemanaStr = "Terça-feira";
    }

    
    if (diaSemana == 4){
    	diaSemanaStr = "Quarta-feira";
    }

    
    if (diaSemana == 5){
    	diaSemanaStr = "Quinta-feira";
    }

    
    if (diaSemana == 6){
    	diaSemanaStr = "Sexta-feira";
    }

    
    if (diaSemana == 7){
    	diaSemanaStr = "Sábado";
    }


    if(mes.equals("01")){
    	mesStr="janeiro";
    	
    }
    
    if(mes.equals("02")){
    	mesStr="fevereiro";
    	
    }
    
    if(mes.equals("03")){
    	mesStr="março";
    	
    }
    
    if(mes.equals("04")){
    	mesStr="abril";
    	
    }
    
    if(mes.equals("05")){
    	mesStr="maio";
    	
    }
    
    if(mes.equals("06")){
    	mesStr="junho";
    	
    }
    
    if(mes.equals("07")){
    	mesStr="julho";
    	
    }
    
    if(mes.equals("08")){
    	mesStr="agosto";
    	
    }
    
    if(mes.equals("09")){
    	mesStr="setembro";
    	
    }
    
    if(mes.equals("10")){
    	mesStr="outubro";
    	
    }
    
    if(mes.equals("11")){
    	mesStr="novembro";
    	
    }
    
    if(mes.equals("12")){
    	mesStr="dezembro";
    	
    }
	
    resultado=diaSemanaStr + " | " + dia + " de " + mesStr + " de " + ano; 
	
	return resultado;
}	
	
}
