package Common::DB::DBIxCore;

use strict;
use warnings;

use base (qw/DBIx::Class::Core/);

use JSON::XS;
use XML::Simple;
use Common::NameCase;

sub getdbh { shift->{'_result_source'}->{'schema'}->{'storage'}->{'_dbh'}; }

sub coldata { shift->{'_column_data'}; }

sub json { JSON::XS::encode_json( shift->{'_column_data'} ); }

sub xml { XML::Simple::XMLout( shift->{'_column_data'}, 'RootName' => 'Row', 'NoAttr' => 1 ) }

sub html_table {
    my $self  = shift;
    my $html  = "<table border=1>\n";
    my $href  = $self->coldata;
    my $links = $self->links;
    foreach my $k ( sort keys %{$href} ) {
        my $v = $href->{$k};
        $v = defined $v ? $v : 'NULL';

        if ( defined $links->{$k} and $v ne 'NULL' ) {
            my $url = "http://localhost:3000/" . $links->{$k}->{'table'} . "/$v";
            $html .= "<tr><td>$k</td><td><a href=\"$url\">$v</a></td></tr>\n";
        } else {
            $html .= "<tr><td>$k</td><td>$v</td></tr>\n";
        }
    }
    $html .= "</table>\n";
    $html;
}

sub links {
    my $self  = shift;
    my $href  = $self->result_source->_relationships;
    my ($pri) = $self->primary_columns;
    my $rref;
    foreach my $link ( sort keys %{$href} ) {
        my ($fkrel) = values %{ $href->{$link}->{cond} };
        my ($fkcol) = $fkrel =~ m/.*\.(.*)$/;
        next if $fkcol eq $pri;

        my ($table_camel) = $href->{$link}->{'class'} =~ m/.*::(.*)$/;
        my $table = Common::NameCase->camel_to_underscore($table_camel);

        $rref->{$fkcol} = {
            'class' => $href->{$link}->{'class'},
            'value' => $self->get_column($fkcol),
            'table' => $table
        };
    }
    $rref;
}

1;
