#!/usr/bin/env bash
set -euo pipefail

# generate-keystore script simplifies the process of generating a keystore for
# an Android app.
# 
# Recommended key setup for LeanCode projects:
#
# $ generate-keystore "LeanCode" "New Great App" "tst"
#
# $ generate-keystore "Our Awesome Client" "New Great App" "prod_upload"
#
# $ generate-keystore "Our Awesome Client" "New Great App" "prod"

_usage() {
    echo "usage: generate-keystores <owner> <app_name> <flavor>" 1>&2
}

if [ "${1:-}" = "--help" ] || [ "${1:-}" = "-h" ]; then
    _usage
    exit 0
fi

owner="${1:-}"
if [ -z "$owner" ]; then
    echo "owner is not set" 1>&2
    _usage
    exit 1
fi

app_name="${2:-}"
if [ -z "$app_name" ]; then
    echo "app_name is not set" 1>&2
    _usage
    exit 1
fi

flavor="${3:-}"
if [ -z "$flavor" ]; then
    echo "flavor is not set" 1>&2
    _usage
    exit 1
fi

echo "Creating keystore for app $app_name (flavor: $flavor, owner: $owner) ..."

exec keytool -genkey \
    -keystore "${app_name}_$flavor.jks" \
    -keyalg RSA \
    -keysize 2048 \
    -validity 9125 `# 25 years (25 * 365 = 9125 days)` \
    -alias "${app_name}_$flavor" \
    -dname "O=$owner" \
    -noprompt \
    -storetype JKS
