#!/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::Rule::Code;

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   => \@params,
        fail_status => Validate::kStatusError,
        message     => "Not mutually exclusive"
    );

    my $resp = $validate->validate( "A", content_import_id => 2 );

    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;
}
