# Profile-related functions
#
# Copyright (C) 2014  Patrick "P. J." McDermott
#
# This file is part of the ProteanOS Development Kit.
#
# The ProteanOS Development Kit is free software: you can redistribute
# it and/or modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# The ProteanOS Development Kit is distributed in the hope that it
# will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with the ProteanOS Development Kit.  If not, see
# <http://www.gnu.org/licenses/>.

[ "x${_PROFILE_SM+set}" = 'xset' ] && return 0
_PROFILE_SM=1

use output
use locale

PROFILES=' @profiles@ '

profile=

is_profile()
{
	local prof="${1}"

	[ "x${PROFILES# ${prof} }" != "x${PROFILES}" ]
}

profile_set()
{
	local prof="${1}"

	if is_profile "${prof}"; then
		profile="${prof}"
		use "profile/${profile}"
	else
		error 1 "$(get_msg 'profile_not_found')" "${prof}"
	fi

	return 0
}

profile_normalize_suite()
{
	local suite="${1}"

	"prof_${profile}_normalize_suite" "${suite}"
}

profile_detect_arch()
{
	"prof_${profile}_detect_arch"
}

profile_default_plat()
{
	"prof_${profile}_default_plat"
}

# TODO: This should pass through to prof_${profile}_validate_archplat().
profile_validate_archplat()
{
	local arch="${1}"
	local plat="${2}"
	local prof_arch=
	local prof_plat=

	while read -r prof_arch prof_plat; do
		[ "x${prof_arch}" = 'x' ] && continue
		if [ "x${arch}" = "x${prof_arch}" ]; then
			if [ "x${plat}" =  "x${prof_plat}" ]; then
				return 0
			fi
		fi
	done <<-EOF
		$(eval "printf '%s\n' \"\${prof_${profile}_archplats}\"")
		EOF

	return 1
}

profile_select_mirror()
{
	"prof_${profile}_select_mirror"
}

profile_feeds()
{
	local mirror="${1}"
	local arch="${2}"
	local plat="${3}"
	local suite="${4}"

	"prof_${profile}_feeds" "${mirror}" "${arch}" "${plat}" "${suite}"
}

profile_dep_fields()
{
	"prof_${profile}_dep_fields"
}

profile_include_pkg()
{
	local name="${1}"
	local value="${2}"

	"prof_${profile}_include_pkg" "${name}" "${value}"
}

profile_get_fstab()
{
	local arch="${1}"
	local plat="${2}"

	"prof_${profile}_get_fstab" "${arch}" "${plat}"
}

profile_configure_system_native()
{
	local root="${1}"

	"prof_${profile}_configure_system_native" "${root}"
}

profile_configure_system_foreign()
{
	local root="${1}"

	"prof_${profile}_configure_system_foreign" "${root}"
}

# TODO: /etc/os-release should be provided by base-files.
profile_get_os_release()
{
	local arch="${1}"
	local plat="${2}"

	"prof_${profile}_get_os_release" "${arch}" "${plat}"
}