#!/bin/zsh

execute() { log "execute $@" && "$@" }
log() { echo "$@" }

copy_file() {
    local from=$1
    local to=$2
    local filename=$(basename $from)
    [[ -e $to/$filename ]] && execute rm $to/$filename
    execute cp -p $from $to/$filename
}

copy_dir() {
    local from=$1
    local to=$2
    pushd $from > /dev/null
    local directories=(`find . -mindepth 1 -maxdepth 1 -type d`)
    for dir in $directories; do
        [[ -d $to/$dir ]] && execute rm -rf $to/$dir
        execute cp -rp $dir $to/$dir
    done
    local files=(`find . -mindepth 1 -maxdepth 1 -type f`)
    for file in $files; do
        copy_file $file $to
    done
    popd > /dev/null
}

link_dir() {
    local src_dir=$1
    local link_dir=$2
    log "deleting existing link/dir: $link_dir"
    [[ -h "$link_dir" ]] && rm $link_dir
    [[ -d "$link_dir" ]] && rm -rf $link_dir
    log "sym-linking $link_dir -> $src_dir"
    ln -s $src_dir $link_dir
}

log "---------------- dotfiles ----------------"

copy_file src_files/.config/zsh/.zshenv $HOME # duplicate, copy anyway, ensures $ZDOTDIR

copy_dir src_files/.config $XDG_CONFIG_HOME
copy_dir src_files/.local/bin $DIR_BIN
copy_dir src_files/.local/scripts $DIR_SCRIPTS

# on macos, gimp defaults to app-support, so sym-link to actual config
[[ "$BOX_SETUP_OS" = "macos" ]] &&
    link_dir "$XDG_CONFIG_HOME/GIMP" "$HOME/Library/Application Support/GIMP"
link_dir "$XDG_CONFIG_HOME/vim" "$HOME/.vim" # TODO: use vim wrapper or similar instead