#!/bin/bash

#TODO: make this profile work on itself, eg some stuff from inheriting profiles should be moved in, stuff implemented etc
var_DEFAULTFS="/boot:32:ext2:+ swap:256:swap /:7500:ext3 /home:*:ext3"
var_TARGET_DIR="/mnt" # When overriding this, do _not_ add a trailing /.  It's not needed and maybe you could even break something
var_RUNTIME_REPOSITORIES= # array like this ('name1' 'location of repo 1' ['name2' 'location of repo2',..])
var_RUNTIME_PACKAGES=
var_PKG_FILE=$RUNTIME_DIR/aif-package-list # not used by default in base/interactive. can be used by custom procedures or profiles for the automatic procedure
var_MIRRORLIST="/etc/pacman.d/mirrorlist"
var_UI_TYPE="cli" # set to cli or dia for dialog
var_ARCH=`uname -m` #i686 or x86_64. NOTE: this assumes you want to install the same arch as the installation environment you're using. maybe we could decouple those someday..
[ -z "$var_ARCH" ] && die_error "Could not determine your architecture"

###### Phases ( can be overridden by more specific procedures) ######
phase_preparation=(\
	configure \
	intro \
	sysprep \
	select_source \
	runtime_network \
	runtime_repositories \
	runtime_packages)

phase_basics=(\
	set_clock \
	prepare_disks)

phase_system=(\
	package_list \
	install_packages \
	auto_fstab \
	auto_network \
	auto_locale \
	auto_keymap_font \
	configure_system \
	mkinitcpio \
	locales \
	install_bootloader)

phase_finish=(msg_report)



###### Workers ( can be overridden by more specific procedures) ######
worker_intro ()
{
	ask_yesno "This is a low-interactivity 'common defaults' installation, not meant for direct invocation.  Do you really want to do this?  We may overwrite your data."
	if [ $? -gt 0 ]
	then
		die_error "User aborted base profile execution"
	fi
}


worker_sysprep ()
{
	mount -o remount,rw / &>/dev/null
}


worker_configure ()
{
	var_UI_TYPE=${arg_ui_type:-cli}
	ui_init
}


worker_select_source ()
{
	var_PKG_SOURCE_TYPE='cd'
	var_FILE_URL="file:///src/core/pkg"
	var_SYNC_URL= # optional, points to a repository string something like ftp://ftp.belnet.be/mirror/archlinux.org/$repo/os/i686 (eg the same format as what you find in /etc/pacman.conf)
	# if you override var_PKG_SOURCE_TYPE to 'net' (or ask user and he chooses ftp) don't forget to configure the network and to select_mirrors
}


worker_select_source_extras_menu ()
{
	select_source_extras_menu
}


worker_runtime_network ()
{
	#network is assumed to be functional for now because we do it first with /arch/setup. once that falls away, we'll need to implement it here
	true
}


worker_runtime_repositories ()
{
	for i in `seq 0 $((${#var_RUNTIME_REPOSITORIES[@]}/2-1))`
	do
		repo=${var_RUNTIME_REPOSITORIES[$(($i*2))]}
		location=${var_RUNTIME_REPOSITORIES[$(($i*2+1))]}
		list_pacman_repos runtime | grep -q $repo || add_pacman_repo runtime $repo "$location"
	done
}


worker_runtime_packages ()
{
	for pkg in $var_RUNTIME_PACKAGES
	do
		$PACMAN -Sy --noconfirm --needed $pkg
	done
}


worker_set_clock ()
{
	NEXTITEM=
        while true; do
                default=no
                [ -n "$NEXTITEM" ] && default="$NEXTITEM"
                ask_option $default "Date/time configuration" '' required \
                "1" "Select region and timezone" \
                "2" "Set time and date" \
                "3" "Return to Main Menu" || return 1
                [ "$ANSWER_OPTION" = 1 ] && execute worker interactive_timezone && NEXTITEM=2
                [ "$ANSWER_OPTION" = 2 ] && check_depend worker interactive_timezone && execute worker interactive_time && NEXTITEM=3
                [ "$ANSWER_OPTION" = 3 ] && break
        done
}


worker_interactive_timezone ()
{
	interactive_timezone
}


worker_interactive_time ()
{
	interactive_time
}


worker_prepare_disks ()
{
	partition # use lib-archboot function by default
	# in official installer: autoprepare or diy first partitions, then mountpoints
}


# Put the list of packages to be installed in $var_TARGET_PACKAGES and $var_TARGET_GROUPS
worker_package_list ()
{
	var_TARGET_GROUPS=base
}


worker_install_packages ()
{
	target_prepare_pacman core #TODO: it would be better if this was a separate worker, i think
	installpkg
}


worker_auto_fstab ()
{
	target_configure_fstab
}


worker_auto_network ()
{
	[ "$S_DHCP" = 1 ] && target_configure_network dhcp "$PROXY_HTTP" "$PROXY_FTP"  && return 0
	[ "$S_DHCP" = 0 ] && target_configure_network fixed "$PROXY_HTTP" "$PROXY_FTP" && return 0
	[ "$S_DHCP" != 1 -a "$S_DHCP" != 0 ] && return 0
	return 1
}


worker_auto_locale ()
{
	target_configure_initial_locale
}


worker_auto_keymap_font ()
{
	target_configure_initial_keymap_font
}

worker_configure_system ()
{
	#TODO: what to do here?
	true
}


worker_mkinitcpio ()
{
	run_mkinitcpio
}


worker_locales ()
{
	target_locale-gen
}


worker_initialtime ()
{
	cp /etc/localtime ${var_TARGET_DIR}/etc/localtime
}


worker_install_bootlader ()
{
	#TODO: ask which disk, install grub on it
	true
}

worker_msg_report ()
{
	show_report
}
