package edu.caltech.cs2.project04;

import edu.caltech.cs2.datastructures.ArrayDeque;
import edu.caltech.cs2.interfaces.IDeque;

import java.util.HashMap;
import java.util.Map;

public class HashMovieAutoCompleter extends AbstractMovieAutoCompleter {
    private static Map<String, IDeque<String>> titles = new HashMap<>();

    public static void populateTitles() {
        for ( String title : AbstractMovieAutoCompleter.
                getIDMap().keySet()) {
            String[] allwords = title.split(" ");
            IDeque<String> suffixes = new ArrayDeque<>();
            for (int i=0; i<allwords.length; i++) {
                String tempstring = "";
                for (int j=i; j<allwords.length; j++) {
                    tempstring += allwords[j].toLowerCase() + " ";
                }
                suffixes.add(tempstring.substring(0, tempstring.length()-1));
            }
            titles.put(title, suffixes);
        }
    }

    public static IDeque<String> complete(String term) {
        String[] searchterms = term.toLowerCase().split(" ");
        IDeque<String> possiblemovienames = new ArrayDeque<>();
        for (String titlesnames: titles.keySet()) {
            IDeque<String> possiblecombos = titles.get(titlesnames);
            for (String stringg: possiblecombos) {
                String[] wordsinstringg = stringg.split(" ");
                if (wordsinstringg.length<searchterms.length) {
                    break;
                }
                int count = 0;
                for (int i = 0; i < searchterms.length; i++) {
                    if (wordsinstringg[i].equals(searchterms[i])) {
                        count++;
                    }
                }
                if (count >= searchterms.length) {
                    possiblemovienames.add(titlesnames);
                }
            }
        }
        return possiblemovienames;
    }
}
