#!/usr/bin/perl 

use strict;

use lib '/app/tools/common/lib';
use Common::Util qw(trimspaces);

my $catalog_file = $ARGV[0];

unless ($catalog_file) {
    die usage("You must specify a catalog file to import");
}

unless ( -e $catalog_file ) {
    die usage("The specified catalog file does not exist");
}

my @headers = qw(
  album-name
  album-artist
  label-name
  catalog-id
  upc
  album-id
  release-date
  upc-alt
  album-custom-1
  album-custom-2
  album-custom-3
  track-name
  disc-no
  disc-name
  track-no
  track-minutes
  track-seconds
  track-artist
  isrc
  track-id
  genre
  track-custom-1
  track-custom-2
  track-custom-3
);

my %fieldMap = (
    'album-name'     => 4,
    'album-artist'   => 6,
    'label-name'     => 23,
    'catalog-id'     => 9,
    'upc'            => 8,
    'album-id'       => 2,
    'release-date'   => 15,
    'upc-alt'        => undef,
    'album-custom-1' => 10,
    'album-custom-2' => 0,
    'album-custom-3' => 1,
    'track-name'     => 34,
    'disc-no'        => 29,
    'disc-name'      => undef,
    'track-no'       => 33,
    'track-minutes'  => 39,
    'track-seconds'  => undef,
    'track-artist'   => 36,
    'isrc'           => 38,
    'track-id'       => 3,
    'genre'          => 24,
    'track-custom-1' => undef,
    'track-custom-2' => undef,
    'track-custom-3' => undef,
);

my %mapOverride = (
    'album-artist' => 7,
    'track-artist' => 37,
);

print join( "\t", @headers ) . "\n";

open CATALOG, $catalog_file || die "Can't open catalog file '$catalog_file': $!\n";
<CATALOG>;    # purge first line (headers)

while ( my $line = <CATALOG> ) {
    chomp $line;
    my @row = split( "\t", $line );
    my %catalog = ();

    map { $catalog{$_} = trimspaces( $row[ $fieldMap{$_} ] ) if exists $fieldMap{$_} } @headers;

    # handle the override options
    map { $catalog{$_} = $row[ $mapOverride{$_} ] if $row[ $mapOverride{$_} ] } keys %mapOverride;

    # now adjust some of the fields

    ( $catalog{'track-minutes'}, $catalog{'track-seconds'} ) = split /:/, $catalog{'track-minutes'};

    # CONTINUE
    for ( my $i = 0 ; $i < scalar @headers - 1 ; $i++ ) {
        print $catalog{ $headers[$i] }, "\t";
    }
    print $catalog{ $headers[-1] }, "\n";
}

