class Servient {

    public CompletableFuture<ExposedThing> destroy(String id) {
        ExposedThing thing = things.get(id);

        if (servers.isEmpty()) {
            return failedFuture(new ServientException("Servient has no servers to stop exposure Things"));
        }

        log.info("Servient stop exposing '{}'", thing);

        // reset forms
        thing.setForms(new ArrayList<>());
        Map<String, ExposedThingProperty<Object>> properties = thing.getProperties();
        properties.forEach((n, p) -> p.setForms(new ArrayList<>()));
        Map<String, ExposedThingAction<Object, Object>> actions = thing.getActions();
        actions.forEach((n, a) -> a.setForms(new ArrayList<>()));
        Map<String, ExposedThingEvent<Object>> events = thing.getEvents();
        events.forEach((n, e) -> e.setForms(new ArrayList<>()));

        CompletableFuture<Void>[] serverFutures = getServers().stream().map(s -> s.destroy(thing)).toArray(CompletableFuture[]::new);
        return CompletableFuture.allOf(serverFutures).thenApply(result -> thing);
    }

    public  Servient();
    public  Servient(Config config);
    public  Servient(ServientConfig config);
      Servient(List<ProtocolServer> servers,
             Map<String, ProtocolClientFactory> clientFactories,
             Map<String, Object> credentialStore,
             Map<String, ExposedThing> things);

}