#!/usr/bin/env perl

use strict;
use warnings;

use 5.10.0;
use POSIX qw(strftime);
use File::Basename;

my $root;
if (defined $ENV{P1K3_ROOT}) {
  $root = $ENV{P1K3_ROOT} . '/archives';
} else {
  # Fall back to a default:
  $root = $ENV{HOME} . '/workspace/p1k3/archives';
}

# I used to think strftime didn't have a non-zero-padded month/day;
# it turns out you can do this with a - after the % (this may not
# work everywhere, so my original workaround is commented below):

my $dayfile = strftime("%Y/%-m/%-e", localtime());

# $dayfile =~ s{/[0 ]}{/}gx;
#
# (Or: Use it anyway and apply an ad-hoc regex fix, because though we often
# feel we know better in this day and age, we are not ashamed of text
# transformation.  not when the chips are down.  text is the most powerful
# computational abstraction i've ever come close to understanding, if i'm
# honest, and past a certain point life is too short and too precious a span to
# abandon the only tools you have ready to hand.)

my $today = "$root/$dayfile";

if (-d $today) {
  print $today;
} else {
  my $dirname = $today;

  until (-d ($dirname)) {
    # If a dir for the month or year doesn't exist, this moves one step up.
    # Should land in archives/ if no year.
    $dirname = dirname($dirname);
  }
  print $dirname;
}