package com.mongodb.hvdf;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
import com.mongodb.MongoClientURI;
import com.mongodb.hvdf.cli.ServerMonitoringSimulatorLoad;
import com.mongodb.hvdf.resources.FeedResource;
import com.yammer.dropwizard.Service;
import com.yammer.dropwizard.config.Bootstrap;
import com.yammer.dropwizard.config.Environment;

public class HVDFService extends Service<HVDFConfiguration> {

	
	@JsonAutoDetect(fieldVisibility=Visibility.NONE, creatorVisibility=Visibility.NONE)
	abstract class IgnoreBasicDBObjMap {}
		  
	
	public static void main(String[] args) throws Exception {
        new HVDFService().run(args);
    }

    @Override
    public void initialize(Bootstrap<HVDFConfiguration> configBootstrap) {
        configBootstrap.setName("hvdf");
        configBootstrap.addCommand( new ServerMonitoringSimulatorLoad() );

    }

    @Override
    public void run(HVDFConfiguration config, Environment environment) throws Exception {
      	        
       	// Get the configured default MongoDB URI
        MongoClientURI default_uri = config.mongodb.default_database_uri;
        
        // Initialize the services as per configuration
        ServiceManager services = new ServiceManager(config.services, default_uri);
        environment.manage(services);
               
        // Register the custom ExceptionMapper to handle ServiceExceptions
        environment.addProvider(new ServiceExceptionMapper());
        
        environment.addResource( new FeedResource( services.getChannelService()) );
    }
}