#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;
use File::Basename;
use File::Copy;
use File::Compare;
use File::Temp qw(tempfile tempdir);
use XML::LibXML;

use Ernad::Constant;

my $amf_ns=$Ernad::Constant::c->{'amf_ns'} // die;
my $ernad_ns=$Ernad::Constant::c->{'ernad_ns'} // die;

my @files= @ARGV;

foreach my $file (@files) {
  my $bana=basename($file);
  if(not $bana=~m|^(\d{4}-\d{2}-\d{2})|) {
    next;
  }
  my $issuedate=$1;
  &use_issuedate_from_file($file,$issuedate);
}

sub use_issuedate_from_file {
  my $in_file=shift;
  my $target_issuedate=shift;
  my ($fh, $tmp_file) = tempfile(DIR => '/tmp');
  copy($in_file, $tmp_file);
  my $doc;
  $doc = eval {
    XML::LibXML->load_xml(location => $tmp_file);
  } ;
  foreach my $issuedate_element ($doc->getElementsByTagNameNS($ernad_ns,'issuedate')) {
    my $issuedate=$issuedate_element->textContent;
    if($issuedate eq $target_issuedate) {
      next;
    }
    my $target_issuedate_element=$doc->createElementNS($ernad_ns,'issuedate');
    $target_issuedate_element->appendText($target_issuedate);
    $issuedate_element->parentNode->replaceChild($target_issuedate_element,$issuedate_element);
    ## remove extra text after issuedate
    my $next=$target_issuedate_element->nextSibling;
    if($next->nodeType == 3 and $next->textContent=~m|^\s+$|) {
      $next->parentNode->removeChild($next);
    }
  }
  foreach my $coll_element ($doc->getElementsByTagNameNS($amf_ns,'collection')) {
    my $upper_name=$coll_element->parentNode->nodeName;
    if($upper_name ne 'amf') {
      next;
    }
    my $coll=$coll_element->getAttribute('id');
    if(not $coll=~m|:(\d{4}-\d{2}-\d{2})$|) {
      next;
    }
    my $target_coll=substr($coll,0,length($coll)-10).$target_issuedate;
    $coll_element->setAttribute('id',$target_coll);
    #print $coll_element;
  }
  $doc->toFile($tmp_file);
  if(not (compare($tmp_file,$in_file)==0)) {
    copy($tmp_file,$in_file);
  }
}


    
