#!/usr/bin/env perl
use strict;
use warnings;

# Show two octaves of a chord on a full-length fretboard.

# For author testing only:
#use lib map { "$ENV{HOME}/sandbox/$_/lib" } qw(MIDI-Chord-Guitar Music-FretboardDiagram);

use Data::Dumper::Compact qw(ddc);
use MIDI::Chord::Guitar;
use Music::FretboardDiagram;

my $note   = shift || 'C3';
my $flavor = shift || ''; # 'm'=minor, ''=major, '7'=7th, etc.
my $frets  = shift || 16;

(my $name = $note) =~ s/^([A-G][b#]?)\d+/$1/;

my $mcg = MIDI::Chord::Guitar->new(
    # For author testing only:
    #voicing_file => '/home/gene/sandbox/MIDI-Chord-Guitar/share/midi-guitar-chord-voicings.csv'
);

my @specs;

my $fingerings = $mcg->fingering($note, $flavor);
for my $fingering (@$fingerings) {
    my ($chord, $posn) = split /-/, $fingering;
    $chord =~ s/[oO0xX]/-/g;
    push @specs, [$posn, $chord];
}
$fingerings = $mcg->fingering(++$note, $flavor);
for my $fingering (@$fingerings) {
    my ($chord, $posn) = split /-/, $fingering;
    $chord =~ s/[oO0xX]/-/g;
    push @specs, [$posn, $chord]
        if $posn < $frets - 1;
}

@specs = sort { $a->[0] <=> $b->[0] } @specs;
#warn ddc(\@specs, {max_width=>128});

my $dia = Music::FretboardDiagram->new(
#  chord    => 'x02220',
#  position => 1,
  frets    => $frets,
  chord    => \@specs,
  absolute => 1,
  outfile  => $0,
  horiz    => 1,
  size     => 50,
  showname => "$name$flavor",
  verbose  => 1,
);

$dia->draw;
