package com.vogella.jersey.first.util;

import static com.mongodb.client.model.Filters.and;
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Filters.gte;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.bson.Document;
import org.bson.conversions.Bson;

import com.google.gson.Gson;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.vogella.jersey.first.model.mapobject.Coin;
import com.vogella.jersey.first.model.mapobject.MapObject;

public class ChatManager{

	public final Class<T> type;

	private final MongoCollection<Document> collection;
	private final MongoClient mongoClient;
	protected final Random random;

	public static final String COLLECTION_NAME = "chat";

	public ChatManager(Class<T> cls,MongoClient mongoClient){
		this.mongoClient = mongoClient;
		this.collection = collection;
		this.random = new Random();
		this.type = cls;
	}

	private static MongoCollection<Document> retrieveCollection(MongoClient mongoClient){
		try{
			return mongoClient.getDatabase(GameMongoDBUtils.DATABASE_NAME).getCollection(COLLECTION_NAME);
		}catch(Exception e){
			e.printStackTrace();
		}
		
		return null;
	}
	
	public List<T> getByType(int type){
		T mapObjectTemp = null;
		List<T> mapObjects = new ArrayList<>();
		Gson gson = new Gson();
		FindIterable<Document> doc = null;
		try{
			doc = getCollection().find(eq("type",type));
			if(doc != null){
				
				mapObjectTemp = gson.fromJson(doc.toJson(),type);
				if(mapObjectTemp != null){
					mapObjects.add(mapObjectTemp);
				}
				
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		return null;
	}

}