#!/usr/bin/perl

# Copyright (C) 2006 Eric L. Wilhelm

use warnings;
use strict;

=head1 NAME

show_book - show a summary of the book

=cut

package bin::show_book;

use lib 'lib';
use dtRdr::Book;
use dtRdr::Plugins;
dtRdr::Plugins->init;

local $SIG{__WARN__};

sub main {
  my (@args) = @_;
  my ($uri) = @args;
  (-e $uri) or die "no file '$uri'";
  my $book = dtRdr::Book->new_from_uri($uri);
  $book or die;
  print $book->summary;
}

package dtRdr::Book;

# eventually a Book method?

=head2 summary

  $book->summary;

=cut

sub summary {
  my $self = shift;

  my $toc = $self->toc;

  my @data;
  $toc->rmap(sub {
    my $node = shift;
    my $depth = do { my $p = $node; my $d = -1;
      while($p) { $d++; $p = $p->parent; }; $d;
    };

    my $sp = $node->get_info('showpage');
    my $content = (
      (0 or defined($sp)) ? # maybe enable this later
        "->$sp" :
        strip_html(1 ?
          $self->get_raw_content($node) :
          $self->get_content($node)
        )
      );
    if(length($content) > 40) {
      $content =~ s/^(.{19}).*(.{18})$/$1...$2/s;
    }
    my $notes = '';
    if(! $node->get_info('render')) {
      $notes .= 'r=f';
    }
    if(! $node->get_info('render_children')) {
      $notes .= '!rc';
    }

    push(@data, [$notes, '  'x$depth. $node->id, $content]);
  });
  use Text::Table;
  my $tb = Text::Table->new(
    "note\n&left", \"\n |", "node\n&left", \"\n => ", "content\n&left"
  );
  $tb->load(@data);
  return("$tb");

} # end subroutine summary definition
########################################################################

sub strip_html {
  local ($_) = @_;
  s{.*<body>}{}s; s{</body>.*}{}s; s/<[^>]+>//gs;
  s/\n/ñ/g;
  #s/\s+/ /gs;
  return($_);
}

package main;

if($0 eq __FILE__) {
  bin::show_book::main(@ARGV);
}

# vi:ts=2:sw=2:et:sta
my $package = 'bin::show_book';