#!/usr/bin/env perl6

use v6;
use AWS::Pricing;
constant AWSPrice = AWS::Pricing;

# Defaults
my $default_cache_dir = "$*HOME/.aws-pricing";
my $default_region = 'us-east-1';
my $default_format = 'json';

sub set-config(%options) {
  for %options.kv -> $option, $value {
    if $value.defined { 
      AWSPrice::config(|($option => $value));
    }
  }
}

multi MAIN('list', 'services', 
           Bool :$refresh = False,
           :$cache_dir = $default_cache_dir,
           :$region = $default_region) {

  my %options = refresh => $refresh,
                cache_dir => $cache_dir,
                region => $region;

  set-config(%options);

  # List all Service Offer indexes
  say AWSPrice::list-services();
  
}

multi MAIN('service', 'offers', 
           $service_code,
           Bool :$refresh = False,
           :$cache_dir = $default_cache_dir,
           :$region = $default_region,
           :$format where { $format ~~ 'json'|'csv'} = $default_format) {

  my %options = refresh => $refresh,
                cache_dir => $cache_dir,
                region => $region;

  set-config(%options);

  # List current offers for specific service
  say AWSPrice::service-offers(service_code => $service_code, format => $format);

}

sub USAGE {
  say q:to/END/;
      Usage:

        aws-pricing list services
        aws-pricing [--format=json|csv] service offers <service_code>;

      Optional arguments:
        
        --refresh    - Force cache_dir refresh
        --cache_dir  - Path to cache_dir service offer files (Default ~/.aws-pricing)
        --region     - AWS region to pull offer data (Default us-east-1)
      END
}

# vim: ft=perl6
