package incheon.com.web;

import incheon.com.security.service.SecurityUserService;
import incheon.com.security.vo.LoginVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.Arrays;
import java.util.List;

/**
 * 인덱스 페이지 컨트롤러
 * 루트 URL(/)에서 로그인 테스트 페이지를 제공합니다.
 * 운영(prod) 환경에서는 기본 타겟으로 리다이렉트합니다.
 */
@Slf4j
@Controller
@RequiredArgsConstructor
public class IndexController {

    private final SecurityUserService securityUserService;
    private final Environment environment;

    @Value("${sso.default.target:/ags/main.do}")
    private String defaultTarget;

    /**
     * 운영 프로필인지 확인
     */
    private boolean isProductionProfile() {
        return Arrays.stream(environment.getActiveProfiles()).anyMatch(p -> p.equalsIgnoreCase("prod"));
    }

    /**
     * 루트 페이지 - 로그인 테스트 페이지
     * 운영 환경에서는 기본 타겟으로 리다이렉트
     */
    @GetMapping("/")
    public String index(Model model) {
        // 운영 환경: 기본 타겟으로 리다이렉트
        if (isProductionProfile()) {
            log.info("운영 환경 - 기본 타겟으로 리다이렉트: {}", defaultTarget);
            return "redirect:" + defaultTarget;
        }

        log.info("인덱스 페이지 접근");

        try {
            // 데이터베이스에서 활성 사용자 목록 조회
            List<LoginVO> activeUsers = securityUserService.getAllActiveUsers();
            model.addAttribute("activeUsers", activeUsers);
            log.info("활성 사용자 {} 명 조회됨", activeUsers.size());

            // 디버깅: 첫 번째 사용자 정보 출력
            if (!activeUsers.isEmpty()) {
                LoginVO firstUser = activeUsers.get(0);
                log.info("첫 번째 사용자 샘플: userId=[{}], userNm=[{}], deptNm=[{}]",
                    firstUser.getUserId(), firstUser.getUserNm(), firstUser.getDeptNm());
            }

        } catch (Exception e) {
            log.error("사용자 목록 조회 중 오류 발생", e);
            model.addAttribute("activeUsers", List.of());
        }

        model.addAttribute("pageTitle", "인천 지리정보 플랫폼 로그인 테스트");

        return "index";
    }

    /**
     * 명시적 인덱스 페이지 접근
     * 운영 환경에서는 기본 타겟으로 리다이렉트
     */
    @GetMapping("/index")
    public String indexExplicit(Model model) {
        log.info("명시적 인덱스 페이지 접근");
        return index(model);
    }
}
