package com.qmth.qrzk.repository.utils.zujuan;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import com.qmth.qrzk.repository.user.model.Question;

/**
 * 组卷时按照一定规则分类的试题组合
 * 
 * @author luoshi
 * 
 */
public class ZujuanQuestionGroup {

    // ID集合
    private Set<Integer> idSet;

    // 未使用试题集合
    private Map<Integer, Question> unuse;

    // 已使用试题集合
    private Map<Integer, Question> used;

    // 限制使用比例
    private double limit;

    public ZujuanQuestionGroup(double limit) {
        this.idSet = new HashSet<Integer>();
        this.unuse = new HashMap<Integer, Question>();
        this.used = new HashMap<Integer, Question>();
        this.limit = limit;
    }

    public boolean addQuestion(Question question) {
        if (!idSet.contains(question.getId())) {
            idSet.add(question.getId());
            unuse.put(question.getId(), question);
            return true;
        } else {
            return false;
        }
    }

    public boolean test(Integer id) {
        if (idSet.contains(id)) {
            // ID在未使用集合中，且当前已使用试题比例小于设定的限制
            return unuse.get(id) != null && (used.size() * 1.0 / idSet.size() <= limit);
        } else {
            return true;
        }
    }

    public Question useQuestion(Integer id) {
        Question q = unuse.get(id);
        if (q != null) {
            unuse.remove(id);
            used.put(id, q);
            return q;
        } else {
            return null;
        }
    }
}
