package com.fitbank.common.exception;

import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Locale;

import org.hibernate.ScrollableResults;

import com.fitbank.common.hb.UtilHB;
import com.fitbank.hb.persistence.gene.Tresult;



/**
 * Clase que se encarga de generar el archivo userMessages.properties por idioma para el manejo de mensajes de usuario.
 * @author Fitbank
 * @version 2.0
 */
public class UserMessagesGenerator {

  private PathParameter pathParameter = null;
  private String path;
  private String filename = "";
  private PrintStream printstream;
  
  @SuppressWarnings("unused")
  private static final String HQL_TRESULTADOS = " from com.fitbank.hb.persistence.gene.Tresult order by pk.cidioma,pk.cresultado ";
  public UserMessagesGenerator() throws Exception {
    pathParameter = PathParameter.getInstance();
  }

  public void generateProperties() throws Exception{
    path = pathParameter.getValue("path.userMessages");
    ScrollableResults lTresults = this.getTresults();
    while (lTresults.next()){
      Tresult tresult = (Tresult)lTresults.get(0);
      String file = this.getFilename(tresult.getPk().getCresultado(),tresult.getPk().getCidioma());
      if(file != null){
        this.saveFile(file,tresult.getPk().getCresultado(),tresult.getDescripcion());
      }      
    }    
    lTresults.close();
    if(this.printstream != null ) {
      this.printstream.close();
    }
  }
  
  
  private void saveFile(String pFile,String pCode,String pData) throws Exception{
    if(pFile.compareTo(filename) == 0){
      this.printstream.println(pCode+"="+pData);
    }else{
      if(this.printstream != null ) {
        this.printstream.close();
      }
      filename = pFile;
      FileOutputStream fout = new  FileOutputStream(path+pFile);
      this.printstream = new PrintStream(fout);
      this.printstream.println(pCode+"="+pData);
    }
  }
  
  private String getFilename(String pCode,String pLanguage) throws Exception{
    String code = "";
    for (int i = 0; i < pCode.length(); i++) {
      if(Character.isDigit(pCode.charAt(i))){
        break;
      }else{
        code += pCode.charAt(i);
      }
    }
    if(code.compareTo("") == 0){
      return null;
    }    
    return "usermessages_"+pLanguage.toLowerCase()+"_"+Locale.getDefault().getCountry()+"_"+code+".properties";
  }
  
  
  
  @SuppressWarnings("unchecked")
  private ScrollableResults getTresults() throws Exception{
    ScrollableResults lTresults = null;
    UtilHB utilHB = new UtilHB();
    utilHB.setSentence(HQL_TRESULTADOS);    
    lTresults = utilHB.getScroll();
    return lTresults;
  }
  

 
  
}