package BookPub::Admin::Command::ReportSample;
use strict;
use warnings;

use lib '/app/tools/bookpub/lib';
use BookPub::Command;
use base 'BookPub::Command';

use lib '/app/tools/common/lib';
use RSApache::Response::JSON;

use JSON::XS;

sub cmd      { return 'report_sample'; }
sub area     { return 'admin'; }
sub pageName { return 'Sample Output'; }

use constant kSampleDataSrc => "/app/tools/bookpub/templates/admin/report_sample.json";
use constant kTemplate      => "/app/tools/bookpub/templates/admin/report_config.xsl";

my %DELIMITERS = (
    tab    => "\t",
    comma  => ',',
    'pipe' => '&#166;',
);

sub execute {
    my ($self) = @_;

    my $response = $self->SUPER::execute();
    return $response if $response;

    my $src = [];
    unless ( open( F, '<', kSampleDataSrc ) ) {
        return RSApache::Response::JSON->new('failed to get data');
    }

    my $json;
    {
        local $/;
        $json = <F>;
        close(F);
    }

    my @fieldOrder = split( /:/, $self->getParam('col_order') );
    $src = JSON::XS->new()->decode($json);
    my $delimiter = $DELIMITERS{ $self->getParam('delimiter') } or "\t";

    my $output = join( $delimiter, @fieldOrder ) . "<br />\n";
    foreach my $row (@$src) {
        map { $output .= $row->{$_} . $delimiter } @fieldOrder;
        $output =~ s/$delimiter$/<br \/>\n/s;
    }

    return RSApache::Response::JSON->new($output);
}

1;
