#include <QtGui>
#include <QtCore>
#include <QtSql>
#include <QtDebug>
#include "apidialog.h"
#include "textdialog.h"
#include "configdialog.h"
extern QString g_pathabsolu;
//////////////constructeur///////////////////////////////////:
apidialog::apidialog(){
  setupUi(this);
  setAttribute(Qt::WA_DeleteOnClose);
  m_compteur = 0;
  m_namesIntegrated = "";
  //liste lignes d'entêtes
  /*comboBox_2->setEditable(true);
  comboBox_2->setInsertPolicy(QComboBox::InsertAtTop);*/

  QFile titresini(g_pathabsolu+"/titres.ini");
  if(!titresini.open(QIODevice::ReadWrite|QIODevice::Text))
		{
      QMessageBox::warning(0,tr("erreur"),trUtf8("erreur ouverture fichier titres.ini !"),QMessageBox::Ok);
		}
  QTextStream streamtitres(&titresini);
  while(!streamtitres.atEnd()){
      QString lignetitre = streamtitres.readLine();
      m_titres << ""+lignetitre+"";
				}
  //comboBox_2->addItems(m_titres);
  comboBox->setEditable(1);
  comboBox->setInsertPolicy(QComboBox::NoInsert);
  qDebug() << __FILE__ << " " << QString::number(__LINE__);
  //choix user preferentiel et liste d'utilisateurs
  QStringList listepoint;
  QFile user(g_pathabsolu+"/utilisateur.ini");
  if(!user.open(QIODevice::ReadOnly))
	{
      QMessageBox::warning(0,tr("erreur"),trUtf8("erreur ouverture fichier utilisateur.ini !"),QMessageBox::Ok);
	}
  QTextStream point(&user);
  while(!point.atEnd()){
      QString lignepoint = point.readLine();
      listepoint << lignepoint;
  }
  QString utilisateurphrase = listepoint[3];
  utilisateurphrase.replace(" ","");
  QStringList utilliste = utilisateurphrase.split("=");
  QString utilisateur = utilliste[0];
  //choix user
  m_listelogin << utilisateur;
  qDebug() << __FILE__ << " " << QString::number(__LINE__);
  QSqlQuery query;
  query.exec("SELECT Login FROM Personnes");
  qDebug() << __FILE__ << " " << QString::number(__LINE__);
  while(query.next()){
      m_login = query.value(0).toString();
      m_listelogin << ""+m_login+"";
  }
  comboBox->addItems(m_listelogin);
  QDir dir(g_pathabsolu+"/apitemp");
  QStringList filters;
  filters << "*.txt" << "*.rtf" << "*.doc" << "*.hpr" << "*.odt" << "*.abw";
  dir.setNameFilters(filters);
  int numberOfFilesToIntegrate = dir.entryList().size();
  QString labelText = trUtf8("Il y a ")+QString::number(numberOfFilesToIntegrate)+trUtf8(" fichiers à intégrer.");
  label->setWordWrap(true);
  label->setStyleSheet("*{ color:red }");
  label->setText(labelText);
  radioButton -> setChecked(true);
  connect(pushButton,  SIGNAL(pressed()),this,SLOT(dansdocuments()));
  connect(pushButton_2,SIGNAL(pressed()),this,SLOT(close()));
  connect(pushButton_3,SIGNAL(pressed()),this,SLOT(configdialog()));
}

apidialog::~apidialog(){
    m_compteur  = 0 ;
    m_texteblob = "";
    m_login     = "";
    m_listelogin.clear();
    m_titres    .clear();
    }
////////////////////////////////////////////////////////////////////////////////
//fonction d'intégration dans documents
///////////////////////////////////////////////////////////////////////////////
bool apidialog::dansdocuments(){
  label->setText("");
  QSqlDatabase db = QSqlDatabase::database();
  QString user = comboBox->currentText();
  QDir dir(g_pathabsolu+"/apitemp");
  if(radioButton_2 -> isChecked()){
      dir.setPath(g_pathabsolu+"/classeur");
    }
  QStringList filters;
  filters << "*.txt" << "*.rtf" << "*.doc" << "*.hpr" << "*.odt" << "*.abw";
  dir.setNameFilters(filters);
  QStringList listresutext ;
  listresutext = dir.entryList();
  if(listresutext.size() == 0){
      QMessageBox::warning(0,tr("erreur"),trUtf8("erreur: il n'y a pas de fichier\n à intégrer !"),QMessageBox::Close);
      return false;
  }
/////////////////////////////////////////////////////
//boucle
////////////////////////////////////////////////////
  for(int i=0;i<listresutext.size();i++){
      QString texteavantblob;
      QString resutext = g_pathabsolu+"/apitemp/"+listresutext[i];
      if(radioButton_2 -> isChecked()){
          resutext = g_pathabsolu+"/classeur/"+listresutext[i];
      }
      QFile resutextfile(resutext);
      if(!resutextfile.open(QIODevice::ReadWrite|QIODevice::Text)){
           QMessageBox::warning(0,tr("erreur"),trUtf8("erreur ouverture fichier !"),QMessageBox::Ok);
	  }
      QStringList listedutexte;
      QTextStream stream(&resutextfile);
      stream.setCodec("ISO-8859-1");
      while(!stream.atEnd()){
          QString ligne = stream.readLine();
         //ligne.replace("\n","<br/>");
         //ligne.replace("\r\n","<br/>");
         listedutexte << ligne;
         texteavantblob += ligne+"<br/>";
	  }
      texteavantblob.replace("\r","<br/>");
      texteavantblob.replace("\t"," ");
      texteavantblob.replace("\'","\\'");

      QString nom = listedutexte[1];
      QString prenom = listedutexte[2];

      if(radioButton_2 -> isChecked()){
          QStringList listFichier = listresutext[i].split("_");
          nom = listFichier[0];
          prenom = listFichier[1];
      }
    if(nom.contains("'")){//integration des particularites semantiques du nom pour la syntaxe mysql
        nom.replace("'","''");
    }
    if(prenom.contains("'")){//integration des particularites semantiques du nom pour la syntaxe mysql
        prenom.replace("'","''");
    }
    QString name;
    QString surname;
    QString fchgnrliddos;
    QStringList listeiddos;
    QSqlQuery query;
    if(!query.exec("SELECT FchGnrl_NomDos , FchGnrl_Prenom , FchGnrl_IDDos "
                   "from IndexNomPrenom WHERE FchGnrl_NomDos = '"+nom+"' AND FchGnrl_Prenom = '"+prenom+"';")){
        qWarning() << __FILE__ << " " << QString::number(__LINE__) << " " << query.lastError().text();
        }
  while(query.next())
	{
      name = query.value(0).toString();
      surname = query.value(1).toString();
      fchgnrliddos = query.value(2).toString();
      listeiddos << fchgnrliddos;
	}

  if(listeiddos.size() > 1 || listeiddos.size() == 0)
		{
      textdialog *text = new textdialog(name,surname,user,listedutexte,resutext);//nom,prénom,utilisateur,texte,chemin du texte.
      text->show();
      break;
		}
  else{
      //intégration du texte dans rubriqueblobs
      m_texteblob = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone"
                    "=\"yes\" ?><MedinTux_Multimedia_data><HTML_Data><html><head><meta "
                    "name=\"qrichtext\" content=\"1\" /></head><body style=\"font-size:10pt;font-family:"
                    "Arial\"><p>"+texteavantblob+"</p></body></html></HTML_Data><ImageListe></ImageListe>"
                    "</MedinTux_Multimedia_data>";
      QSqlQuery query1;
      if(!query1.exec("INSERT INTO RubriquesBlobs (RbDate_DataRub,RbDate_IDDos) VALUES ('"+m_texteblob+"','"+fchgnrliddos+"')")){
          qWarning() << __FILE__ << " " << QString::number(__LINE__) << " " << query1.lastError().text();
          }
      //intégration données dans rubriqueheads
      QString id_head = query1.lastInsertId().toString();
      QString titre_head = fonctiontitre(listedutexte);
      qDebug() << "titre ="+titre_head << " " << __FILE__ << QString::number(__LINE__);
      if(radioButton_2 -> isChecked()){
          titre_head = resutext.split("_")[2];
          titre_head = titre_head.split(".")[0];
          }
      if(titre_head == ""){
	      titre_head = "docs_externes";
	      }
      QDateTime datetime = QDateTime::currentDateTime();
      QString dateheure = datetime.toString("yyyy-MM-dd hh:mm:ss");
      //datetime = QDate::currentDateTime();
      QSqlQuery query2;
      if(!query2.exec("INSERT INTO RubriquesHead"
          "(RbDate_PrimKey,RbDate_IDDos,RbDate_TypeRub,RbDate_NomDate,RbDate_Date,RbDate_CreateUser,RbDate_CreateSignUser"
          ",RbDate_RefBlobs_Primkey)"
          " VALUES (NULL,'"+fchgnrliddos+"',20080000,'"+titre_head+"','"+dateheure+"','"+user+"','"+user+"','"+id_head+"')")){
          qWarning() << __FILE__ << " " << QString::number(__LINE__) << " " << query2.lastError().text();
              }
    if(query1.numRowsAffected()<1){
        QMessageBox::warning(0,tr("erreur"),""+query1.lastError().text()+"",QMessageBox::Ok);
        }
    else if(query2.numRowsAffected()<1){
        QMessageBox::warning(0,tr("erreur"),""+query2.lastError().text()+"",QMessageBox::Ok);
    }
    else{
      m_compteur += query2.numRowsAffected();
      m_dossCumulatedList << fchgnrliddos;
      resutextfile . copy(g_pathabsolu+"/apitempSauve/"+listresutext[i]);
      m_texteblob = "";
      name = "";
      surname = "";
      fchgnrliddos = "";
      listeiddos.clear();
      resutextfile.remove();
      }
    }

  }//for
  QString strDoss;
  foreach(strDoss,m_dossCumulatedList){
      qDebug() << __FILE__ << " " << QString::number(__LINE__) << " doss = " << strDoss;
      QSqlQuery queryResult;
      if(!queryResult.exec("SELECT FchGnrl_NomDos , FchGnrl_Prenom  FROM IndexNomPrenom WHERE FchGnrl_IDDos = '"+strDoss+"'")){
          qWarning() << __FILE__ << " " << QString::number(__LINE__) << " " << queryResult.lastError().text();
          }
      while(queryResult.next()){
          qDebug() << __FILE__ << " " << QString::number(__LINE__);
          m_namesIntegrated += queryResult.value(0).toString()+" "+queryResult.value(1).toString()+"\n";
          }
      }
    QString stringMess = m_namesIntegrated;
    qWarning() << __FILE__ << " " << QString::number(__LINE__) << " names = " << stringMess;
    QMessageBox::information(0,tr("information"),trUtf8("Intégration "
    "de ")+QString::number(m_compteur)+trUtf8(" documents\ndans la base.\n")
    +trUtf8("Les noms des patients sont : \n")+stringMess,QMessageBox::Ok);

    m_namesIntegrated = "";
    m_compteur = 0;


  return true;
}

void apidialog::configdialog(){
  config *configuration = new config;
  configuration->show();
}

QString apidialog::fonctiontitre(QStringList &stringlist){

  QString titrechoisi = "";
	for(int i=0; i < m_titres.size(); i++)
			{
			    if(m_titres[i].contains("=")){
	                QStringList titresplit = m_titres[i].split("=");
	                int ligne = titresplit[0].toInt();
	                QString terme = titresplit[1];
	                QString titre = titresplit[2];

                    if(stringlist[ligne].contains(terme))
		            {
	                    titrechoisi = titre;

		            }

			    }
			}//for

  return titrechoisi;
}

