#!/usr/bin/perl

my %db;
while (<DATA>) {
    chomp;
    s/#.*$//;
    next unless /\S/;
    my ($key, $host, $user, $pass, $database) = split /\s+/;
    my %items = (host => $host,
                 user => $user,
                 pass => $pass,
                 database => $database,
                );
    $key = lc($key);
    if (exists $db{$key}) {
        warn "Duplicate information for database '$key'; ignoring\n";
    } else {
        $db{$key} = \%items;
    }
}
close DATA;

use Getopt::Std;
my %opt = ("m" => "mysql", v => 0) ;
getopts('vm:', \%opt) or usage();

my ($key, $db) = splice @ARGV, 0, 2;
$key = lc($key);
defined($key) or usage();
my $args = $db{$key} // badkey($key);
$db //= $args->{database} // "epay";

my @cmd = ($opt{"m"},
           "-h$args->{host}", "-u$args->{user}", "-p$args->{pass}",
           $opt{v} ? ("-v", "-v") : (),
           $db,
           @ARGV,
          );
exec @cmd;
die "Couldn't run mysql: $!";

sub usage {
    print STDERR "m database-tag [db-name]
\tdb-name defaults to 'epay'.\n";
    exit 2;
}

sub badkey {
    my ($bk) = @_;
    warn "Unrecognized database key '$bk'.  Known keys:\n";
    my $keys = join " ", sort keys %db;
    warn "\t$keys\n";
    exit 3;
}

__DATA__
beta        testdb04m   mdominus  g4ndA1F
demo        demodb01m   mdominus  g4ndA1F
dev         devdb01m    mdominus  g4ndA1F
dev2        devdb02m    mdominus  g4ndA1F
dev-admin   devdb01m    dbadmin   passwddev3
stage       stagedb01m  mdominus  g4ndA1F
test        testdb01m   mdominus  g4ndA1F
test-admin  testdb01m   dbadmin   passwdtest3
mine        devdb01m    mdominus  g4ndA1F mdominus_epay
