package com.mongodb.mahout;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Date;

import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;

public class MongoImporter {

  /**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			
			long time1 = new Date().getTime();
			BufferedReader br = new BufferedReader( new FileReader( new File( "C:\\Project\\Recommender\\ml-10M100K\\movies.dat" ) ));			
			Mongo mongo = new Mongo("localhost");
			DB db = mongo.getDB("movieLens");
			DBCollection collection = db.getCollection("movies");
			String s = br.readLine();
			int i=0;
			while( s != null ) {
				String[] sArr = s.split("::");
				int movie_id = Integer.parseInt( sArr[0] );
				String name = sArr[1];
				String title = name.substring(0, name.lastIndexOf("(")-1);
				int yearOfRel = Integer.parseInt( name.substring( name.lastIndexOf("(") + 1, name.length()-1));
				String[] genres = sArr[2].split("\\|");
				
				BasicDBObject object = new BasicDBObject();
				object.put("_id", movie_id);
				object.put("title", title);
				object.put("year_of_release", yearOfRel);
				
				BasicDBList list = new BasicDBList();
				for( String genre: genres ) {
					list.add( genre );
				}
				
				object.put("genres", genres);
				
				collection.insert( object );
				i++;
				s = br.readLine();
			}

			br.close();
			System.out.println("Inserted " +i+ " Movies");

			br = new BufferedReader( new FileReader( new File( "C:\\Project\\Recommender\\ml-10M100K\\tags.dat" ) ));			
			collection = db.getCollection("tags");
			s = br.readLine();
			i=0;
			while( s != null ) {
				String[] sArr = s.split("::");
				int user_id = Integer.parseInt( sArr[0] );
				int movie_id = Integer.parseInt( sArr[1] );
				String tag = sArr[2];
				long timeStamp = Long.parseLong( sArr[3] );

				BasicDBObject object = new BasicDBObject();
				object.put("user_id", user_id);
				object.put("item_id", movie_id);
				object.put("tag", tag);
				object.put("timestamp", timeStamp);
				
				collection.insert( object );
				i++;
				s = br.readLine();				
			}
			
			br.close();
			System.out.println("Inserted " +i+ " Tags");
			
			br = new BufferedReader( new FileReader( new File( "C:\\Project\\Recommender\\ml-10M100K\\ratings.dat" ) ));			
			collection = db.getCollection("ratings");
			s = br.readLine();
			i=0;
			while( s != null ) {
				String[] sArr = s.split("::");
				int user_id = Integer.parseInt( sArr[0] );
				int movie_id = Integer.parseInt( sArr[1] );
				String rating = sArr[2];
				long timeStamp = Long.parseLong( sArr[3] );

				BasicDBObject object = new BasicDBObject();
				object.put("user_id", user_id);
				object.put("item_id", movie_id);
				object.put("preference", rating);
				object.put("timestamp", timeStamp);
				
				collection.insert( object );
				i++;
				s = br.readLine();				
			}
			
			br.close();
			System.out.println("Inserted " +i+ " Ratings");

			mongo.close();
			
			long time2 = new Date().getTime();
			long timeTaken = (time2-time1)/1000;
			System.out.println("Completed in " +(int)timeTaken+ " Seconds");
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

}