#!/lang/perl

use strict;
use warnings;

use File::Spec;

my $labels_dir = "$ENV{HOME}/labels"; # XXX
my $labels_by_inode_dir = "$ENV{HOME}/labels.by.inode"; # XXX

mkdir ($labels_dir);
mkdir ($labels_by_inode_dir);

my $datetime = `dt`;
chomp ($datetime);

# lb: label a file...

# for now, all labels are per user not global.

my (@labels, @files);
while (1) {
	my $arg = shift;
	if (!defined $arg) { die "syntax: lb file1 file2 file3 : lbl1 lbl2 lbl3" }
	if ($arg eq ":") { last }
	push @files, $arg;
}
while (@ARGV) {
	my $arg = shift;
	push @labels, $arg;
}

for my $label (@labels) {
	my $dir = File::Spec->catfile($labels_dir, $label);
	mkdir $dir;
}
for my $file (@files) {
	my ($volume,$directories,$leaf) = File::Spec->splitpath( $file );
	my $inode = (stat($file))[1];
	open BYINODE, ">>".File::Spec->catfile($labels_by_inode_dir, $inode);
	for my $label (@labels) {
		my $dest;
		while (1) {
			$dest = File::Spec->catfile($labels_dir, $label, $leaf."_".$datetime);
			last unless -e $dest;
			sleep 1;
			$datetime = `dt`;
		} # this isn't quite secure!
		link $file, $dest ||
			warn "$!";
		symlink File::Spec->rel2abs($file), "${dest}_path" ||
			warn "$!";
		print BYINODE "$label\n";
	}
	close BYINODE;
}
