package Catmandu::Fix::isbn_versions;

our $VERSION = '0.15';

use Catmandu::Sane;
use Business::ISBN;
use Moo;
use Catmandu::Fix::Has;

has path => (fix_arg => 1);

with 'Catmandu::Fix::SimpleGetValue';

sub emit_value {
    my ($self, $var) = @_;

    qq|
if (is_value(${var}) && length(${var})) {
  my \$val = ${var};
  \$val =~ s/\\s.*//;
  my \$isbn = Business::ISBN->new(\$val);
  if (defined \$isbn && \$isbn->is_valid) {
    my \$isbn13 = \$isbn->as_isbn13->as_string;
    my \$isbn13d = \$isbn13;
    \$isbn13d =~ s/\-//g;
    my \$isbn10 = \$isbn->as_isbn10;
    if (\$isbn10) {
      my \$isbn10d = \$isbn10->as_string;
      \$isbn10d =~ s/\-//g;
      ${var} = [\$isbn10->as_string, \$isbn10d, \$isbn13, \$isbn13d];
    } else {
      ${var} = [(\$isbn13, \$isbn13d)];
    }
  }
}
|;
}

=head1 NAME

Catmandu::Fix::isbn_versions - provide different forms for an ISBN

=head1 SYNOPSIS

  # Convert any given ISBN to ISBN-13 and ISBN-10 (if possible) with and without dashes.

=head1 SEE ALSO

L<Catmandu::Fix>, L<Catmandu::Fix::isbn10>, L<Catmandu::Fix::isbn13>

=cut

1;