package com.zioinfo.mall.config;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * SPA(React Router) 폴백 — 클라이언트 라우트 딥링크/새로고침 지원.
 *
 * <p>스토어프론트(/, /product/**, /cart, /checkout ...) 와 관리자(/admin/**) 는
 * 모두 단일 index.html 위에서 React Router 가 처리한다. 서버에 해당 정적 파일이
 * 없으므로, API/정적자원이 아닌 모든 GET 요청을 index.html 로 forward 한다.
 *
 * <p>제외 대상: /api/**, /actuator/**, /ws/**, /swagger-ui/**, /v3/**,
 * 그리고 점(.)이 포함된 실제 정적 리소스(*.js, *.css, *.jpg, *.png ...)는
 * Spring 기본 ResourceHandler 가 먼저 처리하므로 여기로 오지 않는다.
 */
@Controller
public class SpaForwardController {

    // 점(.)이 없는 단일/다중 세그먼트 경로 → SPA 라우트로 간주하고 index.html 로 forward.
    // 정규식: 한 개 이상의 경로 세그먼트, 각 세그먼트에 '.' 미포함.
    @RequestMapping(value = {
            "/admin", "/admin/**",
            "/{path:^(?!api|actuator|ws|swagger-ui|v3|assets|img|images|static)[^.]*}",
            "/{path:^(?!api|actuator|ws|swagger-ui|v3|assets|img|images|static)[^.]*}/**"
    })
    public String forwardSpa() {
        return "forward:/index.html";
    }
}
