#!/usr/bin/env bash

PROGNAME="${BASH_SOURCE[0]}"
HERE="$(cd "$(dirname "$PROGNAME")" &>/dev/null && pwd)"
READIES=$(cd $HERE/.. && pwd)
. $READIES/shibumi/defs

create_utf8_profile_script() {
	local profile_d=`get_profile_d`
	if [[ -n $1 ]]; then
		local language="$__language"
	fi
	cat <<-EOF > $profile_d/utf8.sh
		export LANG="${__language}.${__utf8}"
		export LC_ALL="${__language}.${__utf8}"
		EOF
	if [[ $FORCE == 1 || -z $LANGUAGE ]]; then
		cat <<-EOF >> $profile_d/utf8.sh
			export LANGUAGE="${__language}"
			EOF
	fi
}

FORCE=${FORCE:-1}

if [[ $FORCE != 1 ]]; then
	# LANGUAGE can be erronously set to something like en_US.utf8
	# so only take the language part:
	__language="$(echo "$LANGUAGE" | cut -f1 -d.)"
	if [[ -n $__language ]]; then
		if ! locale -a 2>/dev/null | grep -w "$__language" &> /dev/null; then
			__language=''
		fi
	fi
else
	__language=''
fi

if [[ -z $__language ]]; then
	__language=en_US
	if ! locale -a 2>/dev/null | grep -w "$__language" &> /dev/null; then
		__language=C
	fi
fi

# cat prevents grep from failing
utf8_loc=$(locale -a | grep -w "$__language" | grep -i utf | grep 8 | cat)
if [[ -n $utf8_loc ]]; then
	__utf8=$(echo "$utf8_loc" | cut -d. -f2)
else
	# it is possible to have en_US language with no utf8
	# if so, fallback on C and try our luck
	utf8_loc1="$utf8_loc"
	utf8_loc=$(locale -a | grep -w C | grep -i utf | grep 8 | cat)
	if [[ -n $utf8_loc ]]; then
		__language=C
	else
		# stick to en_US.utf8
		# A distribution-specific scripts may enable it eventually
		__utf8=utf8
	fi
fi

export __language
export __utf8

if is_command apt-get; then
	if ! locale -a 2>/dev/null | grep "${__language}\.${__utf8}" &> /dev/null; then
		if ! dpkg -l locales locale-gen &> /dev/null; then
			runn apt-get -qq update
			runn apt-get install --fix-missing -q -y locales
		fi
		runn locale-gen --purge ${__language}.${__utf8}
		runn dpkg-reconfigure -f noninteractive locales
	fi
	create_utf8_profile_script

elif is_command yum; then
	EPEL=$(source /etc/os-release; echo "$VERSION_ID";)
	if [[ $EPEL == 8 ]]; then
		runn dnf install -y langpacks-en glibc-all-langpacks
	elif [[ -f /etc/yum.conf && -n $(grep '^override_install_langs=' /etc/yum.conf | cat) ]]; then
		runn @ <<-EOF
			sed -i 's/^\(override_install_langs=\)/# \1/' /etc/yum.conf
			EOF
		runn "yum reinstall -y glibc-common || yum install -y glibc-common"
	fi
	create_utf8_profile_script

else
	if ! locale -a 2>/dev/null | grep "${__language}\.${__utf8}" &> /dev/null; then
		export __language=C
	fi
	create_utf8_profile_script
fi
