package incheon.pack.map.service.impl;

import incheon.pack.map.mapper.PackMapMapper;
import incheon.pack.map.vo.PackMapLayerVO;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

/**
 * PackMapServiceImpl 단위 테스트.
 * Mapper 위임 및 반환값 정합성을 검증한다.
 */
@ExtendWith(MockitoExtension.class)
class PackMapServiceImplTest {

    @InjectMocks
    private PackMapServiceImpl service;

    @Mock
    private PackMapMapper packMapMapper;

    @Test
    @DisplayName("selectLayerList — Mapper에 위임하고 결과 그대로 반환")
    void selectLayerList() {
        PackMapLayerVO vo = new PackMapLayerVO();
        PackMapLayerVO layer = new PackMapLayerVO();
        layer.setTaskLyrNm("레이어1");
        when(packMapMapper.selectLayerList(vo)).thenReturn(List.of(layer));

        List<PackMapLayerVO> result = service.selectLayerList(vo);

        assertThat(result).hasSize(1);
        assertThat(result.get(0).getTaskLyrNm()).isEqualTo("레이어1");
        verify(packMapMapper).selectLayerList(vo);
    }

    @Test
    @DisplayName("selectLayerListTotCnt — Mapper 카운트 결과 반환")
    void selectLayerListTotCnt() {
        PackMapLayerVO vo = new PackMapLayerVO();
        when(packMapMapper.selectLayerListTotCnt(vo)).thenReturn(42);

        int result = service.selectLayerListTotCnt(vo);

        assertThat(result).isEqualTo(42);
        verify(packMapMapper).selectLayerListTotCnt(vo);
    }

    @Test
    @DisplayName("selectLayerGroupList — Mapper 그룹 목록 반환")
    void selectLayerGroupList() {
        PackMapLayerVO group = new PackMapLayerVO();
        group.setLyrGroupCd("G001");
        when(packMapMapper.selectLayerGroupList()).thenReturn(List.of(group));

        List<PackMapLayerVO> result = service.selectLayerGroupList();

        assertThat(result).hasSize(1);
        assertThat(result.get(0).getLyrGroupCd()).isEqualTo("G001");
        verify(packMapMapper).selectLayerGroupList();
    }
}
