/*
  XuMoQi - word game program
  Copyright (C) 2014  Jeff Pace

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License along
  with this program; if not, write to the Free Software Foundation, Inc.,
  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

  See https://raw.github.com/jpace/xumoqi/master/LICENSE for the full license.

  The full source code for this program is available at:
  http://github.com/jpace/xumoqi

  This program includes code from the GPL program:
  http://sourceforge.net/projects/scrabbledict/
*/

package org.incava.xumoqi.words;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.incava.xumoqi.lang.StringUtil;
import org.incava.xumoqi.util.MapUtil;
import org.incava.xumoqi.util.StringListUtil;

public class WordMapByChar {
    private final Map<Character, ArrayList<String>> byChar;
    private final int index;
    
    public WordMapByChar(int index) {
        byChar = new HashMap<Character, ArrayList<String>>();
        this.index = index;
    }

    public void addWord(String word) {
        char ch = StringUtil.charAt(word, index);
        MapUtil.putMultiMap(byChar, ch, word);
    }

    public List<String> getForChar(Character ch) {
        return byChar.get(ch);
    }
    
    public ArrayList<String> getMatchingForChar(Word queryWord) {
        String pat = queryWord.asPattern();
        char ch = queryWord.getChar(index);
        List<String> forChar = getForChar(ch);
        return StringListUtil.getMatching(forChar, pat);
    }
}
