package com.cube;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import com.cube.storage.LSMStorageEngine;
import com.cube.cql.QueryExecutor;
import com.cube.sql.SQLExecutor;

import java.io.IOException;

/**
 * Cube Database - Main Application
 */
@SpringBootApplication
public class CubeApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(CubeApplication.class, args);
    }
    
    @Bean
    public LSMStorageEngine storageEngine() throws IOException {
        String dataDir = System.getProperty("cube.datadir", "/tmp/cube-data");
        return new LSMStorageEngine(dataDir);
    }
    
    @Bean
    public QueryExecutor queryExecutor(LSMStorageEngine storageEngine) {
        return new QueryExecutor(storageEngine);
    }
    
    @Bean
    public SQLExecutor sqlExecutor(QueryExecutor queryExecutor, LSMStorageEngine storageEngine) {
        return new SQLExecutor(queryExecutor, storageEngine);
    }
}
