package io.cattle.platform.core.dao;

import io.cattle.platform.archaius.util.ArchaiusUtil;
import io.cattle.platform.core.model.Host;
import io.cattle.platform.core.model.IpAddress;
import io.cattle.platform.core.model.PhysicalHost;
import io.github.ibuildthecloud.gdapi.id.IdFormatter;

import java.util.List;
import java.util.Map;

import com.netflix.config.DynamicLongProperty;

public interface HostDao {

    public final static DynamicLongProperty HOST_REMOVE_DELAY = ArchaiusUtil.getLong("host.remove.delay.seconds");
    public static final DynamicLongProperty HOST_REMOVE_START_DELAY = ArchaiusUtil.getLong("host.remove.delay.startup.seconds");

    List<? extends Host> getHosts(Long accountId, List<String> uuids);

    boolean hasActiveHosts(Long accountId);

    Host getHostForIpAddress(long ipAddressId);

    IpAddress getIpAddressForHost(Long hostId);

    Map<Long, List<Object>> getInstancesPerHost(List<Long> hosts, IdFormatter idFormatter);

    PhysicalHost createMachineForHost(Host host, String driver);

    Map<Long, PhysicalHost> getPhysicalHostsForHosts(List<Long> hosts);

    void updateNullUpdatedHosts();

    List<? extends Host> findHostsRemove();

}
