#!/bin/bash

set -e

#sed -i 's/from/to/g'                       // global replace
#sed -i '/^some line$/d'                    // delete line
#sed -i '/^some line$/,+2d'                 // delete line and next 2 lines
#sed -i '/^some line$/i line 1\nline 2'     // insert lines before line
#sed -i '/^some line$/a line 1\nline 2'     // insert lines after line

base_suffix=..
source "$(dirname "$(readlink -f "$0")")/$base_suffix/.global"

generator_base_dir="$(dirname "$(readlink -f "$0")")"
generator_base_dir="${generator_base_dir%/}"

patches_source_dir="$base_dir/patches-src"

mkdir -p "$patches_source_dir"
rm -rf "$patches_source_dir"/*

transform_files() {

    local cutoff="$1"
    local files=( "${@:2}" )

    local qc="$(echo "$cutoff" | sed 's/\./\\\./g')"

    for file in "${files[@]}"; do
        #if [[ -f "$file" ]]; then

            sed -i "s~\/\/<${qc}\/\/~\/\*<${qc}\*\/~g" "$file"
            sed -i "s~\/\*>${qc}\*\/~\/\/>${qc}\/\/~g" "$file"

        #fi
    done

}

transform_dir() {

    shopt -s nullglob globstar

    local cutoff="$1"
    local dir="$2"

    transform_files "$cutoff" "$dir"/**/*".java"{,"("*")"}

}

generate_split() {

    shopt -s nullglob globstar

    local cutoff="$1"
    local source="$2"
    local target="$3"

    cp -r "$source" "$target"
    
    for file in "$target"/**/*"(<$cutoff)"; do
        rm -rf "${file%"(<$cutoff)"}"
        mv -T "$file" "${file%"(<$cutoff)"}"
    done

    transform_dir "$cutoff" "$target"

}

generate_highest() {

    shopt -s nullglob globstar

    local gen_source="$1"
    local target="$2"

    cp -r "$gen_source" "$target"

    for file in "$target"/**/*"(>"*")"; do
        mv -Tn "$file" "${file%"(>"*")"}"
    done

}

generate_all() {

    cd "$patches_source_dir"
    local gen="$generator_base_dir"

    generate_highest "$gen"/sigspoof-hook sigspoof-hook-11.0
    #*** DEDICATED 11.0 only ***
    #generate_split '11.0' sigspoof-hook-11.0 sigspoof-hook-7.0-10.0
    #generate_split '7.0' sigspoof-hook-7.0-10.0 sigspoof-hook-4.1-6.0
    #generate_split '4.1' sigspoof-hook-4.1-6.0 sigspoof-hook-4.0
    #generate_split '4.0' sigspoof-hook-4.0 sigspoof-hook-1.5-2.3

    generate_highest "$gen"/sigspoof-core sigspoof-core

}

generate_all "$@"
