#ifndef SEARCH_HPP
#define SEARCH_HPP

#include "Service.hpp"
#include <vector>

void search(std::vector<Service*> &list, const char * const &query) {
	for (int i = list.size()-1; i > -1; i--) {
		if (list[i]->name.find(query) == std::string::npos) {
			list.erase(list.begin() + i);
		}
	}
}

#if 0
#include <string>
#include <vector>
#include <algorithm>

// https://github.com/Meteorix/pylcs

vector<string> utf8_split(const string &str){
    vector<string> split;
    int len = str.length();
    int left = 0;
    int right = 1;

    for (int i = 0; i < len; i++){
        if (right >= len || ((str[right] & 0xc0) != 0x80)){
            string s = str.substr(left, right - left);
            split.push_back(s);
            // printf("%s %d %d\n", s.c_str(), left, right);
            left = right;
        }
        right ++;
    }
    return split;
}

// https://github.com/schiffma/distlib
int mini(int a, int b, int c){
    return(min(a, min(b,c)));
}

int levenshtein_dist(const string &word1, const string &word2){
    ///
    ///  Please use lower-case strings
    /// word1 : first word
    /// word2 : second word
    ///
	
    //int size1 = word1.size(), size2 = word2.size();

    vector<string> word1_ = utf8_split(word1);
    vector<string> word2_ = utf8_split(word2);
    int size1 = word1_.size();
    int size2 = word2_.size();		
	
    int suppr_dist, insert_dist, subs_dist;
    int* dist = new int[(size1+1)*(size2+1)];

    for(int i=0; i<size1+1; ++i)
        dist[(size2+1)*i] = i;
    for(int j=0; j<size2+1; ++j)
        dist[j] = j;
    for(int i=1; i<size1+1; ++i){
        for(int j=1; j<size2+1; ++j){
            suppr_dist = dist[(size2+1)*(i-1)+j] + 1;
            insert_dist = dist[(size2+1)*i+j-1] + 1;
            subs_dist = dist[(size2+1)*(i-1)+j-1];
            if(word1_[i-1]!=word2_[j-1]){  // word indexes are implemented differently.
                subs_dist += 1;
            }
            dist[(size2+1)*i+j] = mini(suppr_dist, insert_dist, subs_dist);
        }
    }
    // --------------------------------------------------------
    int res = dist[(size1+1)*(size2+1) - 1];
    delete dist;
    return(res);
}
#endif

#endif