package dev.lions.user.manager.mapper;

import dev.lions.user.manager.dto.role.RoleDTO;
import dev.lions.user.manager.enums.role.TypeRole;
import org.junit.jupiter.api.Test;
import org.keycloak.representations.idm.RoleRepresentation;

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

import static org.junit.jupiter.api.Assertions.*;

/**
 * Tests supplémentaires pour RoleMapper pour améliorer la couverture
 */
class RoleMapperAdditionalTest {

    @Test
    void testToDTO_WithAllFields() {
        RoleRepresentation roleRep = new RoleRepresentation();
        roleRep.setId("role-123");
        roleRep.setName("admin");
        roleRep.setDescription("Administrator role");
        roleRep.setComposite(false);

        RoleDTO dto = RoleMapper.toDTO(roleRep, "test-realm", TypeRole.REALM_ROLE);

        assertNotNull(dto);
        assertEquals("role-123", dto.getId());
        assertEquals("admin", dto.getName());
        assertEquals("Administrator role", dto.getDescription());
        assertEquals(TypeRole.REALM_ROLE, dto.getTypeRole());
        assertFalse(dto.getComposite());
    }

    @Test
    void testToDTO_WithNullFields() {
        RoleRepresentation roleRep = new RoleRepresentation();
        roleRep.setId("role-123");
        roleRep.setName("user");

        RoleDTO dto = RoleMapper.toDTO(roleRep, "test-realm", TypeRole.REALM_ROLE);

        assertNotNull(dto);
        assertEquals("role-123", dto.getId());
        assertEquals("user", dto.getName());
        assertNull(dto.getDescription());
    }

    @Test
    void testToDTOList_Empty() {
        List<RoleDTO> dtos = RoleMapper.toDTOList(Collections.emptyList(), "test-realm", TypeRole.REALM_ROLE);

        assertNotNull(dtos);
        assertTrue(dtos.isEmpty());
    }

    @Test
    void testToDTOList_WithRoles() {
        RoleRepresentation role1 = new RoleRepresentation();
        role1.setId("role-1");
        role1.setName("admin");
        RoleRepresentation role2 = new RoleRepresentation();
        role2.setId("role-2");
        role2.setName("user");

        List<RoleDTO> dtos = RoleMapper.toDTOList(Arrays.asList(role1, role2), "test-realm", TypeRole.REALM_ROLE);

        assertNotNull(dtos);
        assertEquals(2, dtos.size());
        assertEquals("admin", dtos.get(0).getName());
        assertEquals("user", dtos.get(1).getName());
    }

    // La méthode toKeycloak() n'existe pas dans RoleMapper
    // Ces tests sont supprimés car la méthode n'est pas disponible
}

