/*
 Copyright 2019 Alain Dargelas
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
 
 http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 */

/* 
 * File:   StringUtils.cpp
 * Author: alain
 * 
 * Created on March 14, 2017, 10:43 PM
 */

#include "StringUtils.h"
#include <algorithm>
#include <locale>
#include <sstream>

using namespace SURELOG;

StringUtils::StringUtils () { }

StringUtils::StringUtils (const StringUtils& orig) { }

StringUtils::~StringUtils () { }

std::string StringUtils::to_string(double a_value, const int n)
{
    std::ostringstream out;
    out.precision(n);
    out << std::fixed << a_value;
    return out.str();
}

void StringUtils::tokenizeMulti(std::string str, std::string separator, std::vector<std::string>& args){
 std::string tmp;
 unsigned int sepSize = separator.size();
 unsigned int stringSize = str.size();
 for (unsigned int i = 0; i < stringSize; i++) 
    {
      bool isSeparator = true;
      for (unsigned int j = 0; j < sepSize; j++)
        {
          if (i+j >= stringSize)
            break;
          if (str[i+j] != separator[j])
            {
              isSeparator = false;
              break;
            }
        }
      if (isSeparator)
        {
          i = i + sepSize -1;
          args.push_back(tmp);
          tmp = "";
          if (i == (str.size() -1))
            args.push_back(tmp);
        }
      else if (i == (str.size() -1))
        {     
           tmp += str[i];
           args.push_back(tmp);
           tmp = "";
        }
      else 
        {
          tmp += str[i];
        }
    } 
}

void StringUtils::tokenize(std::string str, std::string separator, std::vector<std::string>& args){
 std::string tmp;
 unsigned int sepSize = separator.size();
 unsigned int stringSize = str.size();
 for (unsigned int i = 0; i < stringSize; i++) 
    {
      bool isSeparator = false;
      for (unsigned int j = 0; j < sepSize; j++)
        {
          if (str[i] == separator[j])
            {
              isSeparator = true;
              break;
            }
        }
      if (isSeparator)
        {
          args.push_back(tmp);
          tmp = "";
          if (i == (str.size() -1))
            args.push_back(tmp);
        }
      else if (i == (str.size() -1))
        {     
           tmp += str[i];
           args.push_back(tmp);
           tmp = "";
        }
      else 
        {
          tmp += str[i];
        }
    } 
}

void
StringUtils::tokenizeBalanced (std::string str, std::string separator, std::vector<std::string>& args)
{
  std::string tmp;
  unsigned int sepSize = separator.size ();
  unsigned int stringSize = str.size ();
  int level = 0;
  bool inDoubleQuote = false;
  for (unsigned int i = 0; i < stringSize; i++)
    {
      if (str[i] == '"') 
        {
          if (inDoubleQuote == false)
            {
              level++;
              inDoubleQuote = true;
            }
          else 
            {
              level--;
              inDoubleQuote = false;
            }
        }
      if (str[i] == '(' || str[i] == '[' || str[i] == '{')
        {
          level++;
        }
      if (str[i] == ')' || str[i] == ']' || str[i] == '}')
        {
          level--;
        }
      bool isSeparator = false;
      for (unsigned int j = 0; j < sepSize; j++)
        {
          if (str[i] == separator[j])
            {
              if (level == 0) isSeparator = true;
              break;
            }
        }
      if (isSeparator)
        {
          args.push_back (tmp);
          tmp = "";
          if (i == (str.size () - 1))
            args.push_back (tmp);
        }
      else if (i == (str.size () - 1))
        {
          tmp += str[i];
          args.push_back (tmp);
          tmp = "";
        }
      else
        {
          tmp += str[i];
        }
    }
}

void StringUtils::replaceInTokenVector(std::vector<std::string>& tokens, std::vector<std::string> pattern, std::string news)
{
  unsigned int patternIndex = 0;
  std::vector<std::string>::iterator itr;
  bool more = true;
  while (more)
    {
      more = false;
      for (itr = tokens.begin (); itr != tokens.end (); itr++)
        {
          if (*itr == pattern[patternIndex])
            {
              patternIndex++;
              if (patternIndex == pattern.size ())
                {
                  *itr = news;
                  patternIndex = 0;
                  itr = tokens.erase (itr - (pattern.size () - 1), itr);
                  more = true;
                }
            }
          else
            {
              patternIndex = 0;
            }
        }
    }
}


void StringUtils::replaceInTokenVector(std::vector<std::string>& tokens, std::string pattern, std::string news)
{ 
  unsigned int tokensSize = tokens.size();
  for (unsigned int i = 0; i < tokensSize; i++)
    {
      if (tokens[i] == pattern)
        tokens[i] = news;
    } 
}


std::string StringUtils::getFirstNonEmptyToken(std::vector<std::string>& tokens) {
  unsigned int tokensSize = tokens.size();
  for (unsigned int i = 0; i < tokensSize; i++)
    {
      if (tokens[i] != " ")
        return tokens[i];
    } 
  return "";
}


std::string & StringUtils::trim(std::string & str)
{
   return ltrim(rtrim(str));
}

std::string & StringUtils::ltrim(std::string & str)
{
  auto it2 =  std::find_if( str.begin() , str.end() , [](char ch){ return !std::isspace<char>(ch , std::locale::classic() ) ; } );
  str.erase( str.begin() , it2);
  return str;   
}

std::string & StringUtils::rtrim(std::string & str)
{
  auto it1 =  std::find_if( str.rbegin() , str.rend() , [](char ch){ return !std::isspace<char>(ch , std::locale::classic() ) ; } );
  str.erase( it1.base() , str.end() );
  return str;   
}

std::string & StringUtils::rtrimEqual(std::string & str) 
{
  auto it1 =  std::find_if( str.rbegin() , str.rend() , [](char ch){ return (ch == '=') ; } );
  if (it1 != str.rend())
    str.erase( it1.base() - 1, str.end() );
  return str;
}

std::string & StringUtils::rtrim(std::string & str, char c) 
{
  auto it1 =  std::find_if( str.rbegin() , str.rend() , [c](char ch){ return (ch == c) ; } );
  if (it1 != str.rend())
    str.erase( it1.base() - 1, str.end() );
  return str;
}

std::string & StringUtils::ltrim(std::string & str, char c) 
{
  auto it1 =  std::find_if( str.begin() , str.end() , [c](char ch){ return (ch == c) ; } );
  if (it1 != str.end())
    str.erase( str.begin(), it1 +1);
  return str;
}

bool StringUtils::ltrimStat(std::string & str, char c) 
{
  auto it1 =  std::find_if( str.begin() , str.end() , [c](char ch){ return (ch == c) ; } );
  if (it1 != str.end())
    {
      str.erase( str.begin(), it1 + 1);
      return true;
    }
  return false;
}

std::string StringUtils::leaf(std::string str) {
  std::string result;
  char c = '.';
  auto it1 =  std::find_if( str.rbegin() , str.rend() , [c](char ch){ return (ch == c) ; } );
  if (it1 != str.rend())
    str.erase( str.begin(), it1.base()  );
  return str;
  return result;
}

std::string& StringUtils::getRootFileName(std::string & str) {
  bool found = true;
  while (found) 
    {
      found = ltrimStat(str, '/');
    }
  return str;
}

std::string StringUtils::replaceAll(std::string str, const std::string& from, const std::string& to) {
    size_t start_pos = 0;
    while((start_pos = str.find(from, start_pos)) != std::string::npos) {
        str.replace(start_pos, from.length(), to);
        start_pos += to.length(); // Handles case where 'to' is a substring of 'from'
    }
    return str;
}

std::string StringUtils::eliminateRelativePath(std::string path) {
  return replaceAll(path, "..", "__");
}

std::string StringUtils::getLineInString(std::string& bulk, unsigned int line) {
  std::string lineText;
  unsigned int size = bulk.size();
  const char* str = bulk.c_str();
  unsigned int count = 1;
  for (unsigned int i = 0; i < size; i++)
    {
      if (line == count)
        {
          lineText += str[i];
        }
      if (str[i] == '\n')
        count++;
      if (count > line)
        break;
    }
  
  return lineText;
}


