package api;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tracker.DataCaptureServer;
import java.io.IOException;

@SpringBootApplication
public class ApiApplication {
    public static void main(String[] args) {
    
        try{
            DataCaptureServer.start();
        }catch(IOException e){
            System.out.println(e);
        }
        SpringApplication.run(ApiApplication.class, args);
    }

    // @Bean
    // public WebMvcConfigurer corsConfigurer() {
    //     return new WebMvcConfigurer() {
    //         @Override
    //         public void addCorsMappings(CorsRegistry registry) {
    //             registry.addMapping("/**")
    //                     .allowedOrigins("*")
    //                     .allowedMethods("*")
    //                     .allowedHeaders("*")
    //                     .exposedHeaders(HttpHeaders.CONTENT_DISPOSITION);
    //         }
    //     };
    // }
}