#!/bin/sh
set -eu

DEFAULT_LICENSE='mit'
STAGED_FILES=''

log_skipping () {
    echo "$1 already exists, skipping" >&2
}

usage () {
    echo "$0: [-l license-type] [-n project_name] [-r]" >&2
    exit 1
}

while getopts l:n:rh flag
do
    case $flag in
        l) LICENSE="$OPTARG";;
        n) PROJECT_NAME="$OPTARG";;
        r) RESTRUCTURED_TEXT='1';;
        h) usage;;
        \?) usage;;
    esac
done
shift "$(( OPTIND - 1 ))"

if [ -n "${LICENSE:-}" ] && ! \
    license -list | awk '{print \$1}' | grep --quiet --fixed-strings --line-regexp "$LICENSE"
then
    echo 'Unknown license type.' >&2
    exit 1
fi

if [ -z "${PROJECT_NAME:-}" ]
then
    PROJECT_NAME="$(basename "$PWD")"
fi

if [ -f .gitignore ]
then
    log_skipping .gitignore
else
    git skel .gitignore
    STAGED_FILES="$STAGED_FILES .gitignore"
fi

if [ -z "${RESTRUCTURED_TEXT:-}" ]
then
    if [ -f README.md ]
    then
        log_skipping README.md
    else
        git skel README.md
        sed -i "s/PROJECT_NAME/$PROJECT_NAME/" README.md
        git add README.md
        STAGED_FILES="$STAGED_FILES README.md"
    fi
else
    if [ -f README.rst ]
    then
        log_skipping README.rst
    else
        git skel README.rst
        UNDERLINE="$(echo "$PROJECT_NAME" | sed 's/./#/g')"
        sed -i "s/PROJECT_NAME/$PROJECT_NAME/" README.rst
        sed -i "2s/.*/$UNDERLINE/" README.rst
        git add README.rst
        STAGED_FILES="$STAGED_FILES README.rst"
    fi
fi

if [ -f LICENSE.txt ]
then
    log_skipping LICENSE.txt
else
    git license "${LICENSE:-$DEFAULT_LICENSE}"
    STAGED_FILES="$STAGED_FILES LICENSE.txt"
fi

if [ -n "$STAGED_FILES" ]
then
    # shellcheck disable=SC2086
    git commit --message "Scaffolding." --only $STAGED_FILES
else
    echo 'Skipped all files, nothing to commit.' >&2
fi
