package study.gateway;

import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient;
import reactor.core.publisher.Flux;

/** Synthetic mutable directory input, not a registry protocol or preselected LB result. */
public class LabDirectory implements ReactiveDiscoveryClient {
    private final Map<String,List<ServiceInstance>> entries=new ConcurrentHashMap<>();
    public void set(String service,List<ServiceInstance> instances) { entries.put(service,List.copyOf(instances)); }
    public String description() { return "u32 synthetic directory"; }
    public int getOrder() { return -100; }
    public Flux<ServiceInstance> getInstances(String service) {
        return Flux.defer(() -> Flux.fromIterable(entries.getOrDefault(service,List.of())));
    }
    public Flux<String> getServices() { return Flux.fromIterable(entries.keySet()); }
}
