package com.humansreadcode.example.config;

import com.github.mongobee.Mongobee;
import com.mongodb.MongoClient;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.data.mongodb.core.mapping.event.ValidatingMongoEventListener;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;

@Configuration
@EnableMongoRepositories(DatabaseConfiguration.MONGO_REPOSITORIES_PACKAGE)
@Import(value = MongoAutoConfiguration.class)
public class DatabaseConfiguration {

    private static final String CHANGE_LOGS_SCAN_PACKAGE = "com.humansreadcode.example";
    static final String MONGO_REPOSITORIES_PACKAGE = "com.humansreadcode.example";

    @Bean
    public ValidatingMongoEventListener validatingMongoEventListener() {
        return new ValidatingMongoEventListener(validator());
    }

    @Bean
    public LocalValidatorFactoryBean validator() {
        return new LocalValidatorFactoryBean();
    }

    @Bean
    public Mongobee mongobee(final MongoClient mongoClient, final MongoProperties mongoProperties) {
        final Mongobee mongobee = new Mongobee(mongoClient);
        mongobee.setDbName(mongoProperties.getDatabase());
        mongobee.setChangeLogsScanPackage(CHANGE_LOGS_SCAN_PACKAGE);
        mongobee.setEnabled(true);
        return mongobee;
    }
}