package com.eassessment.model;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;

import org.hibernate.dialect.IngresDialect;

import com.eassessment.pojo.Questions;
import com.eassessment.pojo.TestSet;
import com.eassessment.pojo.Topics;

public class AssessmentModel {
	public static Map<Integer, TestSet> getTestData() {

		Map<Integer, TestSet> map = new HashMap<Integer, TestSet>();
		Map<Integer, TestSet> map2 = new HashMap<Integer, TestSet>();
		List<Topics> topics = AdminDao.getInstance().getMainTopic();
		int index = 1;
		for (Topics topic : topics) {
			System.out.println(map.size());
			System.out.println("Tipic name:"+topic.getTopic_name()+"\t Questionsize:"+topic.getQuestion().size());
			for (Questions q : topic.getQuestion()) {
				TestSet testset = new TestSet();

				testset.setTopic_id(topic.getTopic_id());
				testset.setQues_id(q.getQuestion_id());
				testset.setQues_name(q.getQuestion_name());
				testset.setOptionList(q.getOption());
				//System.out.println("Static="+q.getOption().size());
				if (q.getOption().size() > 0)
					map.put(index++, testset);
			}
		}
		 
//		System.out.println("======================================");
//		Set<Integer> set = map.keySet();
//		for(Integer in: set){
//			System.out.println(in +"-->"+ map.get(in));
//		}
		 
		
		ArrayList<Integer> randomNumber=generateRandomNumber(map.size());
		for (int i = 0; i < randomNumber.size(); i++) {
			map2.put(i+1, map.get(randomNumber.get(i)));
		}
		
//		System.out.println("======================================");
//		Set<Integer> set2 = map2.keySet();
//		for(Integer in: set2){
//			System.out.println(in +"-->"+ map2.get(in));
//		}
//		
		return map2;
		 
 
	}
	private static ArrayList<Integer> generateRandomNumber(int size) 
    { 
         int rnd; 
         Random rand=new Random(); 
         int[] randNo = new int[size]; 
         ArrayList<Integer>  numbers = new ArrayList<Integer>(); 
         for (int k=0 ; k<size;k++) 
         { 
              rnd = rand.nextInt(size) + 1; 
              if(k==0) 
              { 
                   randNo[0] = rnd; 
                   numbers.add(randNo[0]); 
              } 
              else 
              { 
                   while(numbers.contains(new Integer(rnd))) 
                   { 
                        rnd = rand.nextInt(size) + 1; 
                   } 
                   randNo[k] = rnd; 
                   numbers.add(randNo[k]); 
              } 
         }
        
         return numbers;
    }  
}
