#!/usr/bin/perl
# Copyright (C) 2011-2012 eBox Technologies S.L.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2, as
# published by the Free Software Foundation.
#
# This program 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 this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

use strict;
use warnings;

use EBox;
use EBox::Config;
use EBox::Global;
use EBox::Sudo;
use EBox::Util::SQL;
use EBox::Util::Debconf;
use Error qw(:try);

my $restart = 1;
if ($ARGV[0] eq '--no-restart') {
    $restart = 0;
    shift (@ARGV);
}

my ($modname, $version) = @ARGV;

# We need to get this as root to avoid warning on console
my $drInstall = EBox::Util::Debconf::value('zentyal-core/dr_install');

EBox::init();

# Do not create tables if we are on the first stage of the DR installer
# they will be created later before launching restore-tool
unless (defined ($drInstall) and ($drInstall eq 'true')) {
    EBox::Util::SQL::createModuleTables($modname);
}

# Copy purge-module script if exists
my $purgeSrc = "/usr/share/zentyal-$modname/purge-module";
if (EBox::Sudo::fileTest('-f', $purgeSrc) ) {
    my $purgeDst = "/var/lib/zentyal/purge-module/$modname";
    EBox::Sudo::root("cp '$purgeSrc' '$purgeDst'");
    EBox::Sudo::root("chmod 0750 '$purgeDst'");
}

my $module = EBox::Global->modInstance($modname);

$module->redis->begin();

$module->initialSetup($version);

# Run migrations only if upgrading
if ($version) {
    $module->migrate($version);
}

try {
    if ($restart) {
        $module->save();
    } else {
        $module->saveConfig();
    }
    $module->redis->commit();
} otherwise {
    $module->redis->rollback();
    EBox::warn("Restart for $modname failed");
};

exit 0;
