class AzureInstancePriceService implements CloudInstancePriceService<AzureRegion> {

    @Override
    public double getPriceForDisk(final List<InstanceOffer> diskOffers, final int instanceDisk,
                                 final String instanceType, final boolean spot, final AzureRegion region) {
        final InstanceOfferRequestVO requestVO = new InstanceOfferRequestVO();
        requestVO.setTermType(TermType.ON_DEMAND.getName());
        requestVO.setOperatingSystem(LINUX_OPERATING_SYSTEM);
        requestVO.setTenancy(SHARED_TENANCY);
        requestVO.setUnit(HOURS_UNIT);
        requestVO.setProductFamily(INSTANCE_PRODUCT_FAMILY);
        requestVO.setRegionId(region.getId());
        requestVO.setInstanceType(instanceType);
        requestVO.setCloudProvider(CloudProvider.AZURE.name());
        final List<InstanceOffer> vmOffers = instanceOfferDao.loadInstanceOffers(requestVO);
        if (vmOffers.size() != 1) {
            log.debug("Virtual machines count should be exactly 1, but found '{}' for instance type '{}'",
                    vmOffers.size(), instanceType);
            return 0;
        }

        final InstanceOffer suitableOffer = getSuitableOffer(diskOffers, instanceDisk, vmOffers.get(0));
        if (Objects.isNull(suitableOffer) || Double.compare(suitableOffer.getMemory(), 0.0) == 0) {
            log.debug("Disk size was not found for instance type '{}'", instanceType);
            return 0;
        }

        return suitableOffer.getPricePerUnit() / (DAYS_IN_MONTH * HOURS_IN_DAY);
    }

}