package dev.lions.user.manager.config;

import io.quarkus.runtime.StartupEvent;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.junit.jupiter.MockitoExtension;

import java.lang.reflect.Field;

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

/**
 * Tests unitaires pour KeycloakTestUserConfig
 */
@ExtendWith(MockitoExtension.class)
class KeycloakTestUserConfigTest {

    @InjectMocks
    private KeycloakTestUserConfig config;

    @BeforeEach
    void setUp() throws Exception {
        // Injecter les propriétés via reflection
        setField("profile", "dev");
        setField("keycloakServerUrl", "http://localhost:8180");
        setField("adminRealm", "master");
        setField("adminUsername", "admin");
        setField("adminPassword", "admin");
        setField("authorizedRealms", "lions-user-manager");
    }

    private void setField(String fieldName, Object value) throws Exception {
        Field field = KeycloakTestUserConfig.class.getDeclaredField(fieldName);
        field.setAccessible(true);
        field.set(config, value);
    }

    @Test
    void testOnStart_DevMode() {
        // La méthode onStart est désactivée, elle devrait juste logger et retourner
        assertDoesNotThrow(() -> {
            config.onStart(new StartupEvent());
        });
    }

    @Test
    void testOnStart_ProdMode() throws Exception {
        setField("profile", "prod");
        
        // En prod, la méthode devrait retourner immédiatement
        assertDoesNotThrow(() -> {
            config.onStart(new StartupEvent());
        });
    }

    @Test
    void testConstants() {
        // Vérifier que les constantes sont définies
        assertNotNull(KeycloakTestUserConfig.class);
        // Les constantes sont privées, on ne peut pas les tester directement
        // mais on peut vérifier que la classe se charge correctement
    }
}
