use Test::More tests => 12;
use Test::Moose;
use RDF::Trine;
use Data::Dumper;
use MooseX::Semantic::Test::Person;

sub round_trip {
my $tbl_uri = 'http://www.w3.org/People/Berners-Lee/card#i';
my $pers_cls = 'MooseX::Semantic::Test::Person';
my $some_data = "SOME_DATA";
my %tbl = (
    from_default => $pers_cls->new,
    from_string => $pers_cls->new( rdf_about => $tbl_uri ),
    from_uri => $pers_cls->new( rdf_about => URI->new($tbl_uri) ),
    from_node => $pers_cls->new( rdf_about => RDF::Trine::Node::Resource->new($tbl_uri)),
    from_scalarref => $pers_cls->new( rdf_about => \$some_data ),
    from_hash => $pers_cls->new( rdf_about => {
            path => '/People/Berners-Lee/card',
            host => 'www.w3.org',
            scheme => 'http',
            fragment => 'i',
    }),
);
for (qw(from_string from_uri from_node from_hash)) {
    isa_ok($tbl{$_}->rdf_about, RDF::Trine::Node::Resource);
    is($tbl{$_}->rdf_about->uri, $tbl_uri, "URI $_ can be round-tripped");
}
for (qw(from_scalarref)) {
    isa_ok($tbl{$_}->rdf_about, RDF::Trine::Node::Resource);
    is($tbl{$_}->rdf_about->uri, "data:,SOME_DATA", "URI $_ can be round-tripped");
}
for (qw(from_default)) {
    isa_ok($tbl{$_}->rdf_about, RDF::Trine::Node::Resource);
    like($tbl{$_}->rdf_about->uri, qr/^urn:uuid:/, "URN::UUID is URL ");
}
}

sub dynamic_has {
    {
        package Foaf;
        use Moose;
        my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/');
        has $_ => (
            traits => ['Semantic'],
            is => 'rw',
            uri => $foaf->$_
        ) foreach (qw/name homepage mbox phone/);
    }
    my $f = Foaf->new(
        name => 'Foo Bar',
        homepage => 'http://foo.bar',
        mbox => 'foo@bar',
        phone => '555-FOOBAR'
    );
    my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/');
    is($f->meta->get_attribute('name')->uri, $foaf->name->uri_value, 'Foaf->name has uri foaf:name');
    # warn Dumper 
}

# sub round_trip_blank_node {
#     my $tbl_uri = 'http://www.w3.org/People/Berners-Lee/card#i';
#     my $pers_cls = 'MooseX::Semantic::Test::Person';
#     my $some_data = "SOME_DATA";
#     my %tbl = (
#         from_default => $pers_cls->new,
#         from_string => $pers_cls->new( rdf_about => blank),
#     );
#     for (qw(from_string from_uri from_node from_hash)) {
#         ok($tbl{$_}->is_blank_node, "$_ is blank node");
#         isnt($tbl{$_}->rdf_about, $tbl_uri, "URI has been replaced with UUID since it's a blank node");
#         # is($tbl{$_}->rdf_about->as_string, $tbl_uri, "URI $_ can be round-tripped");
#     }
#     for (qw(from_scalarref)) {
#         # isa_ok($tbl{$_}->rdf_about, URI);
#         # is($tbl{$_}->rdf_about->as_string, "data:,SOME_DATA", "URI $_ can be round-tripped");
#     }
#     for (qw(from_default)) {
#         # isa_ok($tbl{$_}->rdf_about, URI);
#         # like($tbl{$_}->rdf_about->as_string, qr/^urn:uuid:/, "URN::UUID is URL ");
#     }
# }

&round_trip;
# &round_trip_blank_node;
# &dynamic_has;

# $tbl= 
# isa_ok($tbl->rdf_about, URI);
# $tbl= MooseX::Semantic::Test::Person->new( rdf_about => URI->new('http://www.w3.org/People/Berners-Lee/card#i') );
# isa_ok($tbl->rdf_about, URI);
# warn Dumper $tbl->rdf_about->isa('URI');
# &basic_export;
# done_testing;