package com.kt.event.eventservice.config;

import com.kt.event.common.security.UserPrincipal;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.filter.OncePerRequestFilter;

import java.io.IOException;
import java.util.Collections;

/**
 * 개발 환경용 인증 필터
 *
 * User Service가 구현되지 않은 개발 환경에서 테스트를 위해
 * 기본 UserPrincipal을 자동으로 생성하여 SecurityContext에 설정합니다.
 *
 * TODO: 프로덕션 환경에서는 이 필터를 비활성화하고 실제 JWT 인증 필터를 사용해야 합니다.
 */
public class DevAuthenticationFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {

        // 이미 인증된 경우 스킵
        if (SecurityContextHolder.getContext().getAuthentication() != null) {
            filterChain.doFilter(request, response);
            return;
        }

        // 개발용 기본 UserPrincipal 생성
        UserPrincipal userPrincipal = new UserPrincipal(
                "usr_dev_test_001",  // userId
                "str_dev_test_001",  // storeId
                "dev@test.com",      // email
                "개발테스트사용자",      // name
                Collections.singletonList("USER")  // roles
        );

        // Authentication 객체 생성 및 SecurityContext에 설정
        UsernamePasswordAuthenticationToken authentication =
                new UsernamePasswordAuthenticationToken(userPrincipal, null, userPrincipal.getAuthorities());

        SecurityContextHolder.getContext().setAuthentication(authentication);

        filterChain.doFilter(request, response);
    }
}
