#include "../includes/converterthread.h"

ConverterThread::ConverterThread(QString fin,QFile *fout,QWidget *parent) : QThread(parent)
{
  this->fout=fout;
  inPath=fin;
  i="0";
}
QString ConverterThread::getLine(QString s1, QVector<QString> *s2) //zum Vergleichen ob Zus�tze dabei sind
{
  QString nummer;
  nummer = s1.section(';', 2, 2);
  //qDebug() << s1;
  QVector<QString> str=*s2;
  int index=0;
  do
  {
    if((*s2)[index].contains(nummer))
    {
      QString t=(*s2)[index];
      (*s2).erase((*s2).begin()+index);
      //qDebug()<<(*s2).count();
      return t;
    }
    index++;
  }while(index<(*s2).size());

  return " ";
}
int ConverterThread::regexCount(QString in, char regex)
{
  int count=0;
  for(int i=0;i<in.length();i++)
  {
    if(in[i]==regex)
      count++;
  }
  return count;
}
void ConverterThread::setProzessIntervall(int start,int end)
{
  intervallStart=start;
  intervallEnd=end;
}
void ConverterThread::run()
{
  QFile fin1(inPath);
  processedLines=0;
  char preVal = 0;
  int zeilenZahl=0;
  bool datpreisExists=false;
  if (!fin1.open(QIODevice::ReadOnly | QIODevice::Text))
  {
    i="-1";
  }
  else
  {
      QTextStream out(fout);
      QVector<QString> strVector;

      QFile fin2(inPath.replace(inPath.section('/', -1),"S.001")); //
      if (fin2.open(QIODevice::ReadOnly | QIODevice::Text))
      {
        datpreisExists=true;
        while (!fin2.atEnd())
        {
          strVector.append(fin2.readLine());
        }
        fin2.close();
      }
      QString aZeile;
      QString zZeile;
      QString line;
      zeilenZahl=0;

      while (!fin1.atEnd())
      {
        line = fin1.readLine();
        /*qDebug() << zeilenZahl;
        qDebug() << ";";*/
        zeilenZahl++;
      
        if(zeilenZahl<intervallStart)
          continue;
        if(zeilenZahl>=intervallEnd)
        {
          fin1.close();
          break;
        }
        processedLines++;
        emit emitLineCount(processedLines);
        line=line.remove("\n");
        if (preVal == 'A' && line.startsWith("A"))
        {
          out << aZeile + "-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;";

          if (datpreisExists) //Wenn die DATPREIS.001 existiert!
          {

            out << getLine(aZeile, &strVector);
          }
        }
        if (line.startsWith("A"))
        {
          preVal = 'A';
          aZeile = line;
        }
        else if (preVal == 'A' && line.startsWith("Z"))
        {                        
          preVal = 'Z';
          zZeile = line;
          int dif=16-regexCount(zZeile,';');
          if(dif!=0)
          {
            for(int j=0;j<dif;j++)
            {
              zZeile+=";";
            }
          }
          out << aZeile + zZeile;
          if (datpreisExists) //Wenn die DATPREIS.001 existiert!
          {
            out << getLine(aZeile, &strVector);
          }
        }
        else if (preVal == 'A') //Wenn die Momentane Zeile keine A hat
        {
          out << aZeile + "-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;-;";
          if (datpreisExists) //Wenn die DATPREIS.001 existiert!
          {
            out << getLine(aZeile, &strVector);
          };
        }
        else
        {
          preVal = 0;
        }
      }

      i=QString::number(zeilenZahl);
    fin1.close();
  }
}
