#include <QtGui>
#include <QtCore>
#include <QtSql>
#include <QtDebug>
#include "string.h"
#ifdef Q_WS_WIN
#include "windows.h"
#endif
#include "motdepassedialog.h"
extern QString g_pathabsolu;

motdialog::motdialog()
{
  setupUi(this);
  setAttribute(Qt::WA_DeleteOnClose);
  setAttribute(Qt::WA_AlwaysShowToolTips);
  label                               -> setToolTip(trUtf8("Mettez votre mot de passe MySql actuel."));
  lineEdit_2                          -> setToolTip(trUtf8("Mettez votre mot de passe MySql actuel."));
  label_2                             -> setToolTip(trUtf8("Mettez votre nouveau mot de passe MySql,\nsans espace."));
  lineEdit                            -> setToolTip(trUtf8("Mettez votre nouveau mot de passe MySql,\nsans espace."));
  progressBar                         -> setRange(0,100);
  progressBar                         -> setValue(0);
  //label_2->setToolTip(trUtf8("Vous placez là un chiffre entre 2 et 99\nqui permettra le cryptage du mot de passe mysql dans MedinTux. "));
  QStringList hostutilisateur;
     QFile fichier2(""+g_pathabsolu+"/utilisateur.ini");
     if(fichier2.open(QIODevice::ReadOnly | QIODevice::Text) == false){
         QMessageBox::warning(0,"erreur",QObject::trUtf8("le fichier utilisateur.ini n'est pas accessible"),QMessageBox::Ok);
         }
     QTextStream rhone(&fichier2);
          while(!rhone.atEnd()){
          QString ligne     = rhone.readLine();
          ligne              .replace(" ","");
          QStringList liste = ligne.split("="); 
          hostutilisateur << liste[1];
          }
  m_utilisateur               = hostutilisateur[0];
  m_host                      = hostutilisateur[1];

  lineEdit_3                ->setText(""+m_utilisateur+"");
  lineEdit_4                ->setText(""+m_host+"");
  
  connect(pushButton,  SIGNAL(pressed()),      this,SLOT(mafonctioncryptage()));
  connect(pushButton_2,SIGNAL(pressed()),      this,SLOT(close()));
  connect(lineEdit_3,  SIGNAL(returnPressed()),this,SLOT(changeutilisateur()));
  connect(lineEdit_4,  SIGNAL(returnPressed()),this,SLOT(changemachine()));
}

motdialog::~motdialog(){
    m_utilisateur             = "";
    m_host                    = "";
    m_nouveauMot              = "";
}

void motdialog::mafonctioncryptage()
{
  m_nouveauMot                      = lineEdit-> text();
  CreateConnection();
  ///changer mot de passe mysql
  
      QSqlQuery query;
      //query.exec("INSERT INTO user (Host,User,Password,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Reload_priv,Shutdown_priv,Process_priv,File_priv,Grant_priv,References_priv,Index_priv,Alter_priv,Show_db_priv,Super_priv,Create_tmp_table_priv,Lock_tables_priv,Execute_priv,Repl_slave_priv,Repl_client_priv,Create_view_priv,Show_view_priv,Create_routine_priv,Alter_routine_priv,Create_user_priv) VALUES ('root','localhost',PASSWORD('"+mot+"'),Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y);");
                query.exec("UPDATE user SET Password = PASSWORD('"+m_nouveauMot+"') WHERE Host = '"+m_host+"' AND User = '"+m_utilisateur+"';");
      QSqlQuery query2;
                query2.exec("FLUSH PRIVILEGES;");
      if(query.numRowsAffected() == 0){
          QMessageBox::warning(this,tr("erreur"),trUtf8("Erreur de création du mot de passe\nou vous enlevez le mot de passe."),QMessageBox::Ok);
      }
  //fin du processus et fermeture
  QTimeLine *time                     = new QTimeLine;
  time                                ->setFrameRange(0,100);
  connect(time,SIGNAL(frameChanged(int)), progressBar, SLOT(setValue(int)));
  emit time                           ->start();
  connect(time,SIGNAL(finished()),       this,         SLOT(messageFermeture()));
  

}
//la fonction de connexion à la base mysql où se trouve le mot de passe mysql
bool motdialog::CreateConnection()
{
  QString mot                           = lineEdit_2->text();  
/*QLabel *label = new QLabel;
label->setText(""+QString::number(moteur.size())+"");
label->show();*/
  if((mot == "") == false){
      //QString mapoule;
      //QStringList liste;
      //QString lettre;
      QString hellothatsme;
      //int chiffremot;
      //int chiffre;
      //QString mot;

     /* if(!moteur.open(QIODevice::ReadOnly | QIODevice::Text))
           {QMessageBox::warning(0,QObject::tr("erreur"),QObject::trUtf8("fichier non ouvrable"),QMessageBox::Ok);}
      QTextStream amazone(&moteur);
           while(!amazone.atEnd()){
               mapoule = amazone.readLine();
               }
               chiffremot = mapoule.mid(4,1).toInt();
               chiffre = mapoule.mid(3,1).toInt();
               liste << ""+mapoule.mid(10+chiffre,1)+"";
               mot = liste[0];

       int j= 1;
       for(int i=0; i< chiffremot-1 ;i++){
       lettre = mapoule.mid(j*3+10+chiffre,1);
       liste  << ""+lettre+"";
       j++;
       }
       QString motus;
       int k = 1;
       for(int i=0; i< chiffremot-1 ;i++){
       motus += liste[k];
       k++;
       }*/
  hellothatsme               = mot;//mot+motus;

  QStringList hostuser;
  QFile fichier(""+g_pathabsolu+"/utilisateur.ini");
      if(fichier.open(QIODevice::ReadOnly | QIODevice::Text) == false){
          QMessageBox::warning(0,"erreur",QObject::trUtf8("le fichier utilisateur.ini n'est pas accessible"),QMessageBox::Ok);
          }
  QTextStream loire(&fichier);
      while(!loire.atEnd()){
          QString ligne     = loire.readLine();
          QStringList liste = ligne.split("=");
          hostuser         << liste[1];
      }
  QString utilisateur       = hostuser[0];
  QString host              = hostuser[1];
  //QString motdepasse        = hellothatsme;
  //motdepasse = motdepasse.replace(QRegExp("\\n"),"");
  QSqlDatabase db1          = QSqlDatabase :: addDatabase("QMYSQL");
  db1                        .setHostName(""+host+"");
  db1                        .setDatabaseName("mysql");
  db1                        .setUserName(""+utilisateur+"");
  db1                        .setPassword(hellothatsme);
  if (!db1.open()) {
	QMessageBox::critical(0,"Erreur ouverture de base", db1.lastError().text());
	return false;
  }
  return true;
  }
  else{
    QStringList hostuser;
    QFile fichier(g_pathabsolu+"/utilisateur.ini");
        if(fichier.open(QIODevice::ReadOnly | QIODevice::Text) == false){
            QMessageBox::warning(0,"erreur",QObject::trUtf8("le fichier utilisateur.ini n'est pas accessible"),QMessageBox::Ok);
            }
    QTextStream loire(&fichier);
        while(!loire.atEnd()){
            QString ligne     = loire.readLine();
            QStringList liste = ligne.split("=");
            hostuser         << liste[1];
        }
   QString utilisateur       = hostuser[0];
   QString host              = hostuser[1];

  QSqlDatabase db1           = QSqlDatabase :: addDatabase("QMYSQL");
  db1                         .setHostName(""+host+"");
  db1                         .setDatabaseName("mysql");
  db1                         .setUserName(""+utilisateur+"");
  db1                         .setPassword("");
  if (!db1.open()) {
	QMessageBox::critical(0,"Erreur ouverture de base", db1.lastError().text());
	return false;
  }
  return true;
  }
}
// fonction pour changer d'utilisateur (ne renseigne que crypt)
void motdialog::changeutilisateur(){
   QStringList liste;
   QFile fichier(""+g_pathabsolu+"/utilisateur.ini");
   if(!fichier.open(QIODevice::ReadWrite | QIODevice::Text)){
       QMessageBox::warning(0,"erreur",QObject::trUtf8("le fichier utilisateur.ini n'est pas accessible"),QMessageBox::Ok);
       }
   QTextStream stream(&fichier);
       while(!stream.atEnd()){
           QString ligne = stream.readLine();
           liste << ""+ligne+"";
           }
   fichier                       .remove();
    QFile fichier2(""+g_pathabsolu+"/utilisateur.ini");
        if(!fichier2.open(QIODevice::ReadWrite | QIODevice::Text)){
             QMessageBox::warning(0,"erreur",QObject::trUtf8("le fichier utilisateur.ini n'est pas accessible"),QMessageBox::Ok);
             }
    QTextStream stream2(&fichier2);
    QString ligneutilisateur    = liste[0];
    QStringList listesplit      = ligneutilisateur.split("=");
    QString util                = listesplit[1];
    liste                        .replaceInStrings(""+util+"",""+lineEdit_3->text()+"");
    for(int i= 0; i < liste.size(); i++){
        stream2               << ""+liste[i]+"\n";
    }
}

//fonction pour changer d'IP machine (ne renseigne que crypt)
void motdialog::changemachine(){
  QStringList liste;
  QFile fichier(""+g_pathabsolu+"/utilisateur.ini");
  if(!fichier.open(QIODevice::ReadWrite | QIODevice::Text)){
  QMessageBox::warning(0,"erreur",QObject::trUtf8("le fichier utilisateur.ini n'est pas accessible"),QMessageBox::Ok);}
  QTextStream stream(&fichier);
  while(!stream.atEnd()){
  QString ligne = stream.readLine();
  liste << ""+ligne+"";}
  fichier.remove();
  QFile fichier2(""+g_pathabsolu+"/utilisateur.ini");
  if(!fichier2.open(QIODevice::ReadWrite | QIODevice::Text)){
  QMessageBox::warning(0,"erreur",QObject::trUtf8("le fichier utilisateur.ini n'est pas accessible"),QMessageBox::Ok);}
  QTextStream stream2(&fichier2);
  QString lignehost = liste[1];
  QStringList listesplit = lignehost.split("=");
  QString hostancien = listesplit[1];
  liste.replaceInStrings(""+hostancien+"",""+lineEdit_4->text()+"");
  for(int i= 0; i < liste.size(); i++){
      stream2 << ""+liste[i]+"\n";
  }
}

void motdialog::messageFermeture(){
  QString message      = "<html><body><font size = 4 color = #3300FF><bold>Le mot de passe MySql "+m_nouveauMot+" est enregistré.</bold></font></body></html>";
  std::string str      = message.toStdString();
  const char *charStr  = str.c_str();
  label_5              -> setText(trUtf8(charStr));
  label_5              -> show();
  //QTimer::singleShot(4000, qApp, SLOT(closeAllWindows()));
}
