#!/usr/bin/perl
# SPDX-License-Identifier: BSD-3-Clause-CMU
# See COPYING file at the root of the distribution for more details.

require 5;

use strict;
use warnings;

my @configs;
my @parts;
my $confdir;

sub read_conf {
    my $file = shift;

    open CONF, $file or die "can't open $file";
    print "reading configure file $file...\n";
    while (<CONF>) {
        if (/^#/) {
            next;
        }
        if (/\@include:\s*(.*)$/) {
            print "I will include configure file $1.\n";
            push @configs, $1;
        }
        if (/^configdirectory:\s*(.*)$/) {
            $confdir = $1;
            print "I will configure directory $confdir.\n";
        }
        if (/^(?:meta)?partition-.*:\s*(.*)$/) {
            if (grep /$1/, @parts) {
                next;
            }
            print "I saw partition $1.\n";
            push @parts, $1;
        }
    }
    print "done\n";
    close CONF;
}

my $imapdconf = shift || "/etc/imapd.conf";

push @configs, $imapdconf;

while (my $conf = shift @configs) {
    read_conf($conf);
}

defined $confdir or die "'configdirectory:' in $imapdconf is missing";
@parts or die "No partition defined in $imapdconf";

my $d = $confdir;
print "configuring $d...\n";

chdir $d or die "couldn't change to $d";

mkdir "proc", 0755 || warn "can't create $d/proc: $!";
mkdir "db", 0755 || warn "can't create $d/db: $!";
mkdir "socket", 0755 || warn "can't create $d/socket: $!";
mkdir "log", 0755 || warn "can't create $d/log: $!";
mkdir "msg", 0755 || warn "can't create $d/msg: $!";
mkdir "ptclient", 0755 || warn "can't create $d/ptclient: $!";
mkdir "sync", 0755 || warn "can't create $d/sync: $!";

while (my $part = shift @parts) {
    print "creating $part...\n";
    mkdir $part, 0755 || warn "can't create $part: $!";
    chdir $part or die "couldn't change to partition $part";
    mkdir "stage.", 0755 || warn "can't create $part/stage.: $!";
    mkdir "sync.", 0755 || warn "can't create $part/sync.: $!";
}

print "done\n";

# vim: set ft=perl :
