#!/usr/bin/perl -w

use strict;
use Getopt::Std;
use File::Basename;
use Data::Dumper;

use lib '/app/tools/common/lib';
use Common::RSApp;

use lib '/app/tools/metadata/lib';
use Metadata::Validate::Constraint;
use Validate::Util qw( is_valid_territory_list is_valid_genre );

MAIN: {
    my $appSingleton = new Common::RSApp( clientID => 14 );
    my @params = qw( string1 string2 string3 );

    my $validate = new Metadata::Validate::Constraint();

    #    $validate->config_rule( rule        => "Validate::Rule::Nullable",
    #                            parameter   => 0,
    #                            fail_status => Validate::kStatusNotice,
    #                            message     => "Can not be null" );
    #
    #    $validate->config_rule( rule        => "Validate::Rule::Regex",
    #                            parameter   => '^[A-Z]+$',
    #                            fail_status => Validate::kStatusError,
    #                            message     => "Must ba all caps" );
    #
    #    $validate->config_rule( rule        => "Validate::Rule::Code",
    #                            parameter   => \&some_fun,
    #                            fail_status => Validate::kStatusWarn,
    #                            message     => "String length must be 3 or more characters" );
    #
    #    $validate->config_rule( rule        => "Validate::Rule::Exclusive",
    #                            parameter   => [ 'string1', 'string2' ],
    #                            fail_status => Validate::kStatusError,
    #                            message     => "Not mutually exclusive" );
    #
    #    $validate->config_rule( rule        => "Validate::Rule::Required",
    #                            parameter   => \@params,
    #                            fail_status => Validate::kStatusError,
    #                            message     => "Required field missing" );
    #
    #    $validate->config_rule( rule        => "Validate::Rule::List",
    #                            parameter   => [ 'string', 'string2' ],
    #                            fail_status => Validate::kStatusError, );
    #
    #    $validate->config_rule( rule        => "Validate::Rule::Between",
    #                            parameter   => [ min => '1', max => '2'],
    #                            fail_status => Validate::kStatusError );
    #
    #    $validate->config_rule( rule        => "Validate::Rule::Length",
    #                            parameter   => [ min => '3', max => '4'],
    #                            fail_status => Validate::kStatusError );
    #
    #    $validate->config_rule( rule        => "Validate::Rule::Date",
    #                            parameter   => "MM/DD/YYYY",
    #                            fail_status => Validate::kStatusError );
    #
    #    $validate->config_rule( rule        => "Validate::Rule::Integer",
    #                            parameter   => 1,
    #                            fail_status => Validate::kStatusError );
    #
    #    $validate->config_rule( rule        => "Validate::Rule::Code",
    #                            parameter   => \&Validate::Util::is_valid_isrc,
    #                            fail_status => Validate::kStatusError );

    $validate->config_rule(
        rule        => "Validate::Rule::ImportTime",
        parameter   => 'minutes',
        fail_status => Validate::kStatusError
    );

    my $resp = $validate->validate( 0, track_seconds => 57, track_minutes => 10 );

    printf( "Passed all tests: %s\n", $resp->is_valid()        ? "YES"                    : "NO" );
    printf( "Error code: %s\n",       $resp->error_code()      ? $resp->error_code()      : "<undef>" );
    printf( "Error String: %s\n",     $resp->error_as_string() ? $resp->error_as_string() : "<undef>" );
    print Dumper($resp);
}

sub some_fun {
    my $data = shift;

    return $data && length($data) > 2;
}
