package com.xfestudio.xfeservermanager.infra;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.Map;
import org.junit.jupiter.api.Test;

class ServerManagerRuntimeTest {
    @Test
    void globalOperationEventOmitsPrivilegedResultFields() {
        Object projection = ServerManagerRuntime.publicEventPayload("operation", Map.of(
                "id", "operation-1",
                "kind", "inventory.update",
                "state", "SUCCEEDED",
                "progress", 1.0,
                "requestId", "private-request",
                "targets", java.util.List.of("player"),
                "diffs", java.util.List.of(Map.of("before", "diamond", "after", "air")),
                "policy", Map.of("rules", "private"),
                "result", Map.of("secret", "private")));

        assertThat(projection).isEqualTo(Map.of(
                "id", "operation-1",
                "kind", "inventory.update",
                "state", "SUCCEEDED",
                "progress", 1.0));
    }

    @Test
    void serverStatusEventsAreNotChanged() {
        Map<String, Object> status = Map.of("playersOnline", 3);
        assertThat(ServerManagerRuntime.publicEventPayload("server-status", status)).isSameAs(status);
    }

    @Test
    void globalPolicyEventsTriggerARefetchWithoutLeakingDraftMetadata() {
        Object projection = ServerManagerRuntime.publicEventPayload("policy-draft", Map.of(
                "version", 7,
                "name", "secret draft",
                "description", "confidential policy rationale",
                "updatedBy", "Owner_One"));

        assertThat(projection).isEqualTo(Map.of("changed", true));
        assertThat(ServerManagerRuntime.publicEventPayload(
                "future-private-event", Map.of("secret", "value")))
                .isEqualTo(Map.of("redacted", true));
    }
}
