#!/usr/bin/perl

use common::sense;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use File::Find ();
use XML::CuteQueries;
use Data::Dump qw(dump);
use Date::Manip;

my $cgi = new CGI;
my @pi  = grep {length} split "/", $cgi->path_info;

redirect_to_path_arg(@pi) if @pi;
list_posts();

# {{{ sub redirect_to_path_arg
sub redirect_to_path_arg {
    my $arg = shift;
    my $redir = "https://voltar.org/404";
    my $CQ = XML::CuteQueries->new;

    my @arg = $arg =~ m/^\p{IsXDigit}+$/
       ? eval { split "::", pack("H*", $arg) }
       : eval { split "::", $arg };

    if( @arg ) {
        my ($dev,$ino,$mode,$nlink,$uid,$gid);
        File::Find::find({wanted => sub {
            if( (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && -f _ && /^.*\.xml\z/s ) {

                my @result = eval {
                    $CQ->parsefile( $File::Find::name );
                    $CQ->cute_query('//folder' => {'@date'=>'', '@nlink'=>''})
                };

                for(@result) {
                    if( $_->{date} eq $arg[0] and (not defined $arg[1] or $_->{nlink} eq $arg[1]) ) {

                        my $URL_PATH = $File::Find::name;
                           $URL_PATH =~ s{^/home/voltar/html/}{};
                           $URL_PATH =~ s{_([^/]+)\.xml$}{$1};

                        $redir = "https://voltar.org/$URL_PATH#$_->{nlink}";
                    }
                }

            }

        }}, "/home/voltar/html");
    }

  # die do { local $"=", "; "result=$redir for arg=[@arg]" };
    print $cgi->redirect($redir);
    exit 0;
}

# }}}

sub list_posts {
    print $cgi->header("text/plain");
    say "TODO: list posts";
}
