#!/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
