package com.clouck.service;
import java.util.Collection;
import java.util.List;
import org.joda.time.DateTime;
import org.springframework.data.domain.Pageable;
import com.clouck.model.Region;
import com.clouck.model.ResourceType;
import com.clouck.model.aws.AbstractResource;
import com.clouck.model.aws.ec2.Ec2Version;
import com.clouck.model.aws.ec2.Ec2VersionMeta;
import com.google.common.base.Optional;
public interface AwsService {
long findLatestResourceSizes(String accountId, ResourceType resourceType, Region region);
List<Ec2Version> findEc2VersionsFromIncludeOrderByTimeDetected(String accountId, ResourceType resourceType, Region region, DateTime dateTime);
Optional<Ec2Version> findEc2Version(String ec2VersionId);
List<AbstractResource<?>> findResources(Collection<String> ids, ResourceType resourceType);
// Collection<AbstractResource<?>> findResources(String accountId, ResourceType resourceType, DateTime dateTime);
List<AbstractResource<?>> findResourcesAt(String accountId, ResourceType resourceType, Region region, DateTime dateTime);
Collection<AbstractResource<?>> findResources(String ec2VersionId);
List<Ec2Version> findEc2VersionsFromExcludeOrderByTimeDetected(String accountId, ResourceType resourceType, Region region, DateTime dateTime);
String findUserId(String accessKeyId, String secretAccessKey);
@SuppressWarnings("rawtypes")
Optional<AbstractResource> findResource(String resourceId, ResourceType resourceType);
List<? extends AbstractResource<?>> findResources(ResourceType resourceType, String accountId, String uniqueId);
Optional<Ec2Version> findLatestEc2VersionUptoInclude(String accountId, Region region, ResourceType resourceType, DateTime dt);
Optional<Ec2Version> findLatestEc2Version(String accountId, ResourceType resourceType, Region region);
Optional<Ec2Version> findFirstEc2Version(String accountId, Region region, ResourceType resourceType);
long countEc2VersionsUpto(String accountId, ResourceType resourceType, Region region, DateTime dt, Boolean isIncludeTime);
long countEc2Versions(String accountId, ResourceType resourceType, Region region);
long countEc2VersionMetas(String accountId, ResourceType resourceType, Region region);
Optional<Ec2VersionMeta> findLatestEc2VersionMeta(String accountId, ResourceType resourceType, Region region);
List<Ec2Version> findEc2VersionsOrderByTimeDetectedAsc(String accountId, ResourceType ec2Reservation, Region region);
List<Ec2Version> findEc2VersionsOrderByTimeDetectedDesc(String accountId, ResourceType resourceType, Region region);
List<Ec2VersionMeta> findEc2VersionMetasOrderByTimeDetectedDesc(String accountId, ResourceType resourceType, Region region, Pageable pageable);
long countEc2VersionMetas(String accountId, ResourceType rt, Region region, String uniqueId);
List<Ec2VersionMeta> findEc2VersionMetasOrderByTimeDetectedDesc(String accountId, Region region, ResourceType rt, String uniqueId);
List<Ec2VersionMeta> findEc2VersionMetasOrderByTimeDetectedDesc(String accountId, Region region, Pageable pageable);
List<Ec2VersionMeta> findEc2VersionMetasOrderByTimeDetectedDesc(String accountId, ResourceType resourceType, Region region, Pageable pageable, DateTime dt, Boolean isIncludeTime, String uniqueId);
long countEc2VersionMetas(String accountId, ResourceType resourceType, Region region, DateTime dt, Boolean isIncludeTime, String uniqueId);
long countEc2VersionMetas(String accountId, ResourceType resourceType);
}