package com.its.op.security;

import com.its.op.security.interceptor.ApiInterceptor;
import lombok.AllArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;

@AllArgsConstructor
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    public static final String USER_UUID = "UUID";
    public static final String USER_TIME = "TIME";

    /**
     * Controller Handler 인터셉서 등록
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
//        registry.addInterceptor(new SessionTimerInterceptor());
//        registry.addInterceptor(new LoggerInterceptor());
//        registry.addInterceptor(new UserInterceptor());

        registry.addInterceptor(new ApiInterceptor())
                .addPathPatterns("/api/**")                         // API Controller interceptors
                .excludePathPatterns("/facility/**", "/wall/**")    // 해당 경로는 인터셉터가 가로채지 않는다.
                ;
    }

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")                  // 프로그램에서 제공하는 URL
                //.allowCredentials(true)                         // 쿠키 요청을 허용한다(다른 도메인 서버에 인증하는 경우에만 사용해야하며, true 설정시 보안상 이슈가 발생할 수 있다)
                //.allowedOriginPatterns("*")
                .allowedOrigins("*")                            // 허용할 Origin(요청 url) : "*" 의 경우 모두 허용
//                .allowedHeaders("*")                            // 어떤 헤더들을 허용할 것인지
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 허용할 request http METHOD : POST, GET, DELETE, PUT
                //.exposedHeaders("authorization")                // authorization 헤더를 넘기 위해 exposedHeaders 조건을 추가했다.
                .maxAge(3600)                                   // 브라우저 캐시 시간(단위: 초) : "3600" 이면 최소 1시간 안에는 서버로 재요청 되지 않음
        ;

        // 스프링 부트에서 CORS 설정 시, .allowCredentials(true) 와 .allowedOrigins("*") 를 동시에 사용할 수 없도록 업데이트 되었음.
        // .allowedOrigins("*") ==> .allowedOriginPatterns("*") 로 변경하여 해결...
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //registry.addRedirectViewController("/api/auth/login.do", "/application/login/login.html");
        //registry.addViewController("/api/auth/login.do").setViewName("/application/login/login.html");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
//        registry.addResourceHandler("swagger-ui.html")
//                .addResourceLocations("classpath:/META-INF/resources/");
//        registry.addResourceHandler("/webjars/**")
//                .addResourceLocations("classpath:/META-INF/resources/webjars/");

        String separator = System.getProperty("file.separator");
        String mapDataDir = System.getProperty("user.dir")+separator+"MAPDATA/";
        String downloadDir = System.getProperty("user.dir")+separator+"download/";
        registry.addResourceHandler("/MAPDATA/**")
                .addResourceLocations("file:///" + mapDataDir)
        //.setCachePeriod(60) // seconds
        ;
        registry.addResourceHandler("/download/**")
                .addResourceLocations("file:///" + downloadDir)
        //.setCachePeriod(60) // seconds
        ;
    }

    public static String encUserId(String userId) {
        return userId;
    }
    public static String decUserId(Object encUserId) {
        String decUserId = (String)encUserId;
        return decUserId;
    }
}
