package paginate;

  sub parse {
    my ($class, $document) = (@_);
    my $output={ next => "false" };

    my $limit=int($ENV{'PAGE_LIMIT'});
    my $total=$document->{'total_rows'};
    my $offset=$document->{'offset'};
    my $length=0;
    if(defined($document->{'rows'})) {
      $length=@{$document->{'rows'}};
      if($length > 0 && $length > $limit) {
        if($offset+$limit < $total) {
          my $first=$document->{'rows'}[0];
          my $last=pop(@{$document->{'rows'}});
          $output->{'next_docid'}=$last->{'id'};
          $output->{'next_startkey'}=common->compact($last->{'key'});
          $output->{'previous_docid'}=$first->{'id'};
          $output->{'previous_startkey'}=common->compact($first->{'key'});
          $output->{'next'}="true";
        }
      }
    }
    $output->{'total'}=$total;
    $output->{'offset'}=$offset;
    $output->{'length'}=$length;
    $output->{'limit'}=$limit;
    $output->{'document'}=$document;
    return $output;
  }

  sub exports {
    my ($class, $output) = (@_);
    my $format="export page_%s='%s';";
    my @lines=();
    while ( ($k,$v) = each $output ) {
      if($k eq "document") {
        next;
      }
      push(\@lines, sprintf($format,$k,$v));
    }
    return \@lines;
  }

  sub write {
    my ($class, $output) = (@_);
    my $tmpfile=$ENV{'PAGE_TMP_FILE'};
    my $lines=paginate->exports($output);
    my $exports=join("\n", @{$lines}) . "\n";
    open(TMP_FILE, ">$tmpfile");
    print(TMP_FILE "$exports" );
    close(TMP_FILE);
    return common->stringify($output->{'document'});
  }
  1;
