#!/usr/bin/perl -w

use strict;
my %proj_old_to_new;
rand($$);

#--------------------

if ( ! -d "$ENV{'HOME'}/.task" ) {
  print "failed; $ENV{'HOME'}/.task: no such directory";
  exit;
}

print `mkdir $ENV{'HOME'}/.task-randomized-$$`;
if ( ! -d "$ENV{'HOME'}/.task" ) {
  print "failed; $ENV{'HOME'}/.task-randomized-$$: no such directory";
  exit;
}
print "created $ENV{'HOME'}/.task-randomized-$$\n";

my @words;
while(<DATA>) { 
  chop $_;
  push @words, split(/ /,$_);
}
print "read in $#words words\n";

#--------------------

open(IN,"<$ENV{'HOME'}/.task/pending.data") 
  || die "failed: cannot open ~/.task/pending.data";
open(OUT,">$ENV{'HOME'}/.task-randomized-$$/pending.data") 
  || die "failed: cannot open ~/.task-randomized-$$/pending.data";

my $i = 0;
while(<IN>) {
  if ( $_ =~ /project:\"(.*?)\"/ ) { 
    my $proj = &generate_proj($1);
    $_ =~ s/project:\".*?\"/project:"$proj"/;
  }
  my $descr = &generate_descr;
  $_ =~ s/description:\".*?\"/description:"$descr"/;
  while ( $_ =~ /annotation_\d+:\".*?\"/ ) {
    my $anno = &generate_descr;
    $_ =~ s/annotation_(\d+):\".*?\"/ANNO_$1:\"$anno\"/;
  }
  $_ =~ s/ANNO_(\d+)/annotation_$1/g;
  print OUT $_;
  $i++;
}
close(IN);
close(OUT);

print "anonymous-ized $i lines in ~/.task/pending.data\n";

#--------------------

open(IN,"<$ENV{'HOME'}/.task/completed.data") 
  || die "failed: cannot open ~/.task/completed.data";
open(OUT,">$ENV{'HOME'}/.task-randomized-$$/completed.data") 
  || die "failed: cannot open ~/.task-randomized-$$/completed.data";

$i = 0;
while(<IN>) {
  if ( $_ =~ /project:\"(.*?)\"/ ) { 
    my $proj = &generate_proj($1);
    $_ =~ s/project:\".*?\"/project:"$proj"/;
  }
  my $descr = &generate_descr;
  $_ =~ s/description:\".*?\"/description:"$descr"/;
  while ( $_ =~ /annotation_\d+:\".*?\"/ ) {
    my $anno = &generate_descr;
    $_ =~ s/annotation_(\d+):\".*?\"/ANNO_$1:\"$anno\"/;
  }
  $_ =~ s/ANNO_(\d+)/annotation_$1/g;
  print OUT $_;
  $i++;
}
close(IN);
close(OUT);

print "anonymous-ized $i lines in ~/.task/completed.data\n";

#--------------------

open(IN,"<$ENV{'HOME'}/.task/undo.data") 
  || die "failed: cannot open ~/.task/undo.data";
open(OUT,">$ENV{'HOME'}/.task-randomized-$$/undo.data") 
  || die "failed: cannot open ~/.task-randomized-$$/undo.data";

$i = 0;
while(<IN>) {
  if ( $_ =~ /project:\"(.*?)\"/ ) { 
    my $proj = &generate_proj($1);
    $_ =~ s/project:\".*?\"/project:"$proj"/;
  }
  my $descr = &generate_descr;
  $_ =~ s/description:\".*?\"/description:"$descr"/;
  while ( $_ =~ /annotation_\d+:\".*?\"/ ) {
    my $anno = &generate_descr;
    $_ =~ s/annotation_(\d+):\".*?\"/ANNO_$1:\"$anno\"/;
  }
  $_ =~ s/ANNO_(\d+)/annotation_$1/g;
  print OUT $_;
  $i++;
}
close(IN);
close(OUT);

print "anonymous-ized $i lines in ~/.task/undo.data\n";

#--------------------

chdir("$ENV{'HOME'}");
print `tar -zcf dot-task-$$.tar.gz .task-randomized-$$`;
print "an anonymous-ized version of ~/.task left in ~/dot-task-$$.tar.gz\n";
print "try...\n";
print "  task rc.data.location:~/.task-randomized-$$\n";

exit;

#------------------------------------------------------------------

sub generate_descr {
  my $d = "";
  my $sl = int(rand 4) + 4;
  for my $i (0..$sl) {
    my $nth = int(rand ($#words) + 1);
    $d .= "$words[$nth] ";
  }
  chop $d;
  $d =~ s/\b(\w)/\U$1/;
  return $d;
}

#------------------------------------------------------------------

sub generate_proj {
  my $p = $_[0];
  if ( exists $proj_old_to_new{$p} ) { 
    return $proj_old_to_new{$p};
  }  
  my $nth = int(rand ($#words) + 1);
  $proj_old_to_new{$p} = $words[$nth];
  return $words[$nth];
}

#------------------------------------------------------------------

# 800 some basic words plus 400 some verbs...

__DATA__
a able about account acid across act addition adjustment advertisement
after again against agreement air all almost among amount amusement and
angle angry animal answer ant any apparatus apple approval arch argument
arm army art as at attack attempt attention attraction authority automatic
awake baby back bad bag balance ball band base basin basket bath be beautiful
because bed bee before behaviour belief bell bent berry between bird birth
bit bite bitter black blade blood blow blue board boat body boiling bone
book boot bottle box boy brain brake branch brass bread breath brick bridge
bright broken brother brown brush bucket building bulb burn burst business
but butter button by cake camera canvas card care carriage cart cat cause
certain chain chalk chance change cheap cheese chemical chest chief chin
church circle clean clear clock cloth cloud coal coat cold collar colour
comb come comfort committee common company comparison competition complete
complex condition connection conscious control cook copper copy cord cork
cotton cough country cover cow crack credit crime cruel crush cry cup cup
current curtain curve cushion damage danger dark daughter day dead dear
death debt decision deep degree delicate dependent design desire destruction
detail development different digestion direction dirty discovery discussion
disease disgust distance distribution division do dog door doubt down drain
drawer dress drink driving drop dry dust ear early earth east edge education
effect egg elastic electric end engine enough equal error even event ever
every example exchange existence expansion experience expert eye face fact
fall false family far farm fat father fear feather feeble feeling female
fertile fiction field fight finger fire first fish fixed flag flame flat
flight floor flower fly fold food foolish foot for force fork form forward
fowl frame free frequent friend from front fruit full future garden general
get girl give glass glove go goat gold good government grain grass great
green grey grip group growth guide gun hair hammer hand hanging happy harbour
hard harmony hat hate have he head healthy hear hearing heart heat help high
history hole hollow hook hope horn horse hospital hour house how humour I
ice idea if ill important impulse in increase industry ink insect instrument
insurance interest invention iron island jelly jewel join journey judge jump
keep kettle key kick kind kiss knee knife knot knowledge land language last
late laugh law lead leaf learning leather left leg let letter level library
lift light like limit line linen lip liquid list little living lock long
look loose loss loud love low machine make male man manager map mark market
married mass match material may meal measure meat medical meeting memory
metal middle military milk mind mine minute mist mixed money monkey month
moon morning mother motion mountain mouth move much muscle music nail name
narrow nation natural near necessary neck need needle nerve net new news
night no noise normal north nose not note now number nut observation of off
offer office oil old on only open operation opinion opposite or orange order
organization ornament other out oven over owner page pain paint paper parallel
parcel part past paste payment peace pen pencil person physical picture pig
pin pipe place plane plant plate play please pleasure plough pocket point
poison polish political poor porter position possible pot potato powder power
present price print prison private probable process produce profit property
prose protest public pull pump punishment purpose push put quality question
quick quiet quite rail rain range rat rate ray reaction reading ready reason
receipt record red regret regular relation religion representative request
respect responsible rest reward rhythm rice right ring river road rod roll
roof room root rough round rub rule run sad safe sail salt same sand say
scale school science scissors screw sea seat second secret secretary see
seed seem selection self send sense separate serious servant sex shade shake
shame sharp sheep shelf ship shirt shock shoe short shut side sign silk
silver simple sister size skin skirt sky sleep slip slope slow small smash
smell smile smoke smooth snake sneeze snow so soap society sock soft solid
some son song sort sound soup south space spade special sponge spoon spring
square stage stamp star start statement station steam steel stem step stick
sticky stiff still stitch stocking stomach stone stop store story straight
strange street stretch strong structure substance such sudden sugar suggestion
summer sun support surprise sweet swim system table tail take talk tall taste
tax teaching tendency test than that the then theory there thick thin thing
this thought thread throat through through thumb thunder ticket tight till
time tin tired to toe together tomorrow tongue tooth top touch town trade
train transport tray tree trick trouble trousers true turn twist umbrella
under unit up use value verse very vessel view violent voice waiting walk
wall war warm wash waste watch water wave wax way weather week weight well
west wet wheel when where while whip whistle white who why wide will wind
window wine wing winter wire wise with woman wood wool word work worm wound
writing wrong year yellow yes yesterday you young
am are is abide act agree allow answer ask bake bark bathe be become begin
believe bite boil borrow break bring brush build burn buy call carry catch
choose climb close collect come complete correct cry cut die disappear do
draw drink drive dry eat empty enjoy enter explain face fail fall feel find
fly forget get give go grow hate have hear help hide hit hope hunt hurt
invite join jump keep kill know learn leave lend like live look lose love
make marry mean meet move name need open paint pull push put question rain
reach read ride ring rise rule run sail save say see sell send share shout
show sing sink sit sleep smell speak spell spend stand steal step stop study
swim take taste teach tell think throw tie try understand visit wait wake
watch wear win work write am are is abide act agree allow answer ask bake
bark bathe be become begin believe bite boil borrow break bring brush build
burn buy call carry catch choose climb close collect come complete correct
cry cut die disappear do draw drink drive dry eat empty enjoy enter explain
face fail fall feel find fly forget get give go grow hate have hear help hide
hit hope hunt hurt invite join jump keep kill know learn leave lend like live
look lose love make marry mean meet move name need open paint pull push put
question rain reach read ride ring rise rule run sail save say see sell send
share shout show sing sink sit sleep smell speak spell spend stand steal
step stop study swim take taste teach tell think throw tie try understand
visit wait wake watch wear win work write am are is abide act agree allow
answer ask bake bark bathe be become begin believe bite boil borrow break
bring brush build burn buy call carry catch choose climb close collect come
complete correct cry cut die disappear do draw drink drive dry eat empty
enjoy enter explain face fail fall feel find fly forget get give go grow
hate have hear help hide hit hope hunt hurt invite join jump keep kill know
learn leave lend like live look lose love make marry mean meet move name
need open paint pull push put question rain reach read ride ring rise rule
run sail save say see sell send share shout show sing sink sit sleep smell
speak spell spend stand steal step stop study swim take taste teach tell
think throw tie try understand visit wait wake watch wear win work write
