#! /usr/bin/perl -w

use strict;

use Debconf::Client::ConfModule ':all';

my $DOMAIN = 'librem.one';
my $HUB_NAME = 'Liberty One';
my $HUB_URI = 'https://DOMAIN/accounts/profile/';
my $CHAT_URI = 'https://chat.DOMAIN/accounts/profile/';
my $SOCIAL_URI = 'https://social.DOMAIN/web/getting-started';

version('2.0');
my $capb = capb('backup');

# Regexps for checking domain names, blatantly stolen from exim config
my $rfc1035_label_re  = '[0-9A-Za-z]([-0-9A-Za-z]*[0-9A-Za-z])?';
my $rfc1035_domain_re = "$rfc1035_label_re(\\.$rfc1035_label_re)*";

# Load current settings into Debconf database,
# * accepting empty values (default)
# * silently ignoring invalid values
if (open(CONFIG, '/var/lib/one.liberty/deckhost.conf')) {
	while(<CONFIG>) {
		chomp;
		/^DOMAIN=\"($rfc1035_domain_re?)\"$/
			&& set( 'one.liberty/domain', $1 );
		/^HUB_NAME=\"(.*?)\"$/
			&& set( 'one.liberty/hub/name', $1 );
		/^HUB_URI=\"(\S*?)\"$/
			&& set( 'one.liberty/hub/uri', $1 );
		/^CHAT_URI=\"(\S*?)\"$/
			&& set( 'one.liberty/chat/uri', $1 );
		/^SOCIAL_URI=\"(\S*?)\"$/
			&& set( 'one.liberty/social/uri', $1 );
	};
};

# Query user for changes to settings
# TODO: validate domain
# TODO: validate name (must not contain XDG expandable macros)
# TODO: validate uri
my $state = 1;
while(($state > 0) && ($state <= 6)) {
	($state == 1) && do {
		subst('one.liberty/domain', 'defaultvalue', $DOMAIN);
		input('medium', 'one.liberty/domain');
	};
	($state == 2) && do {
		subst('one.liberty/hub/name', 'defaultvalue', $HUB_NAME);
		input('low', 'one.liberty/hub/name');
	};
	($state == 3) && do {
		subst('one.liberty/hub/uri', 'defaultvalue', $HUB_URI);
		input('low', 'one.liberty/hub/uri');
	};
	($state == 4) && do {
		subst('one.liberty/chat/uri', 'defaultvalue', $CHAT_URI);
		input('low', 'one.liberty/chat/uri');
	};
	($state == 5) && do {
		subst('one.liberty/social/uri', 'defaultvalue', $SOCIAL_URI);
		input('low', 'one.liberty/social/uri');
	};

	my @ret = go;

	if($ret[0] == 30) {
		$state -= 1;
	} else {
		$state += 1;
	}
}

stop;
