require 'rake'

desc "install the dot files into user's home directory"
task :install do
  replace_all = false
  # link dotfiles first
  create_dotfile_link

  Dir['*'].each do |file|
    next if %w[Rakefile README notes fonts iterm id_dsa.pub .git .gitignore gitignore].include? file

    if File.exist?(File.join(ENV['HOME'], ".#{file}"))
      if replace_all
        replace_file(file)
      else
        print "overwrite ~/.#{file}? [ynaq] "
        case $stdin.gets.chomp
        when 'a'
          replace_all = true
          replace_file(file)
        when 'y'
          replace_file(file)
        when 'q'
          exit
        else
          puts "skipping ~/.#{file}"
        end
      end
    else
      link_to_dotfile file
    end
  end

  setup_some_folder "Where are your personal files?", "~/.personal-files"
  setup_some_folder "Where are your work files?", "~/.work-files"
  setup_temp_folder
  setup_work_aliases

  puts "Setup is nearly complete. The last step is to run `git submodule update --init`"
end

def create_dotfile_link
  system %Q{rm -f "$HOME/.dotfiles"}
  system %Q{ln -s $PWD "$HOME/.dotfiles"}
end

def replace_file(file)
  system %Q{rm -r "$HOME/.#{file}"}
  link_to_dotfile file
end

def link_to_dotfile(file)
  link_file "$HOME/.dotfiles/#{file}", "$HOME/.#{file}"
end

def link_file(source, dest)
  puts "linking #{source} to #{dest}"
  system %Q{ln -s #{source} #{dest}}
end

def setup_some_folder(msg, file_name)
  puts msg
  dir = $stdin.gets.chomp
  link_file dir, file_name
end

def setup_temp_folder
  system %Q{mkdir -p ~/.tmp}
end

def setup_work_aliases
  system %Q{touch ~/.work-aliases}
end