#!/usr/bin/env perl

use strict;
use warnings;

use lib 'lib';

use Getopt::Long;
use Pod::Parser::Groffmom;

my %opts = map { $_ => undef } qw/
  mom_title
  mom_subtitle
  mom_author
  mom_copyright
  cover
  toc
  /;

GetOptions(
    "title=s"     => \$opts{mom_title},
    "subtitle=s"  => \$opts{mom_subtitle},
    "author=s"    => \$opts{mom_author},
    "copyright=s" => \$opts{mom_copyright},
    "cover"       => \$opts{mom_cover},
    "toc"         => \$opts{mom_toc},
    "stdtoc"      => \my $stdtoc,
);

foreach my $key ( keys %opts ) {
    delete $opts{$key} unless defined $opts{$key};
}
$opts{mom_toc} = $stdtoc if $stdtoc;

my $parser = Pod::Parser::Groffmom->new( \%opts );
my $file = shift or die "makemom podfile";
unless ( $file =~ /\.pod$/ ) {
    die "Only pod files";
}
my $mom = $file;
$mom =~ s/\.pod$/.mom/;
my $ps = $file;
$ps =~ s/\.pod$/.ps/;
open my $fh, '<', $file or die "Cannot open ($file) for reading: $!";
$parser->parse_from_filehandle($fh);
open my $out, '>', $mom or die "$!";
print $out $parser->mom;
my $command = "groff -mom > $ps $mom";
print $command, $/;
system($command) == 0 or die $?;

if ( not $stdtoc ) {
    open $fh, '<', $ps or die "Cannot open ($ps) for reading: $!";
    my $postscript = do { local $/; <$fh> };   # can be expensive!
    close $fh;
    if ( $postscript =~ s{
        \n%%Page:  \s+ 1    \s+ 1 (.+)    # page 1
        (\n%%Page: \s+ 2    \s+ 2 .+ )    # page 2 up to
        \n%%Page:   \s+ \d+ \s+ \d+ (.+)  # last page (TOC)
        (\n%%Trailer.+)
    }{\n%%Page: 0 0 $1\n%%Page: 1 1$3$2$4}sx ) {
        open $fh, '>', $ps or die "Cannot open ($ps) for writing $!";
        print $fh $postscript;
    }
    else {
        die "no match";
    }
}
system("open $ps") == 0 or die $?;

__END__

=head1 NAME

makemom - Turn POD into mom

=head1 USAGE

 prove [options] [files or directories]

=head1 OPTIONS

Boolean options:

