package com.zioinfo.mes.member;

import com.zioinfo.mes.admin.dto.UserDto;
import com.zioinfo.mes.admin.mapper.AdminUserMapper;
import com.zioinfo.mes.common.ApiResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 구성원(작업자) 조회 API — 작업 배정·실적 입력 시 작업자 선택용.
 *
 * <p>관리자 CRUD 는 /api/admin/users(SuperAdmin)가 담당하고, 본 API 는 조회 전용(Viewer+).
 * 보안: {@link UserDto} 로만 반환하여 password_hash 노출 차단.
 */
@RestController
@RequestMapping("/api/mes/members")
@RequiredArgsConstructor
public class MemberController {

    private final AdminUserMapper mapper;

    /** 활성 구성원 목록(작업자 배정 드롭다운용). role 필터 가능. */
    @GetMapping
    public ApiResponse<List<UserDto>> list(@RequestParam(required = false) String role) {
        List<UserDto> all = mapper.findAll().stream()
            .filter(u -> u.isActive())
            .filter(u -> role == null || role.isBlank() || role.equalsIgnoreCase(u.getRole()))
            .map(UserDto::from)
            .toList();
        return ApiResponse.ok(all);
    }

    /** 현장 작업자(WORKER) 목록 — 작업 배정 전용. */
    @GetMapping("/workers")
    public ApiResponse<List<UserDto>> workers() {
        List<UserDto> workers = mapper.findAll().stream()
            .filter(u -> u.isActive())
            .filter(u -> "WORKER".equalsIgnoreCase(u.getRole()) || "MANAGER".equalsIgnoreCase(u.getRole()))
            .map(UserDto::from)
            .toList();
        return ApiResponse.ok(workers);
    }
}
