#!/usr/bin/env perl

# Return random jazz progressions

use strict;
use warnings;

use Data::Dumper::Compact qw(ddc);
use Data::Dataset::ChordProgressions;
#use Music::Scales qw(get_scale_notes);

my $n    = shift || 4;
my $note = shift || 'C'; # TODO Transpose from C
my $key  = shift || ''; # major, minor or either

my %data = Data::Dataset::ChordProgressions::as_hash();
#warn(__PACKAGE__,' ',__LINE__," MARK: ",ddc($data{jazz}{$key})) if $key;

my @pool;
if ($key) {
    for my $type (keys %{ $data{jazz}{$key} }) {
        push @pool, @{ $data{jazz}{$key}{$type} };
    }
}
else {
    for $key (qw(major minor)) {
        for my $type (keys %{ $data{jazz}{$key} }) {
            push @pool, @{ $data{jazz}{$key}{$type} };
        }
    }
}
#warn(__PACKAGE__,' ',__LINE__," MARK: ",ddc(\@pool));

for my $i (1 .. $n) {
    print "$i. ", ddc($pool[int rand @pool]);
}
