package com.cameleer.server.core.license;

import org.junit.jupiter.api.Test;

import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Map;
import java.util.Set;

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

class LicenseGateTest {

    @Test
    void noLicense_allFeaturesEnabled() {
        LicenseGate gate = new LicenseGate();
        // No license loaded -> open mode

        assertThat(gate.isEnabled(Feature.debugger)).isTrue();
        assertThat(gate.isEnabled(Feature.replay)).isTrue();
        assertThat(gate.isEnabled(Feature.lineage)).isTrue();
        assertThat(gate.getTier()).isEqualTo("open");
    }

    @Test
    void withLicense_onlyLicensedFeaturesEnabled() {
        LicenseGate gate = new LicenseGate();
        LicenseInfo license = new LicenseInfo("MID",
                Set.of(Feature.topology, Feature.lineage, Feature.correlation),
                Map.of("max_agents", 10, "retention_days", 30),
                Instant.now(), Instant.now().plus(365, ChronoUnit.DAYS));
        gate.load(license);

        assertThat(gate.isEnabled(Feature.topology)).isTrue();
        assertThat(gate.isEnabled(Feature.lineage)).isTrue();
        assertThat(gate.isEnabled(Feature.debugger)).isFalse();
        assertThat(gate.isEnabled(Feature.replay)).isFalse();
        assertThat(gate.getTier()).isEqualTo("MID");
        assertThat(gate.getLimit("max_agents", 0)).isEqualTo(10);
    }
}
