#
# Client.pm: client library for wanna-build
# Copyright © 2005      Ryan Murray <rmurray@debian.org>
# Copyright © 2005-2009 Roger Leigh <rleigh@debian.org>
#
# This program 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 2 of the License, or
# (at your option) any later version.
#
# 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, see
# <http://www.gnu.org/licenses/>.
#
#######################################################################

package Buildd::Client;

use strict;
use warnings;

use Sbuild qw($devnull);
use Sbuild::ChrootRoot;
use Cwd;

BEGIN {
    use Exporter ();
    our (@ISA, @EXPORT);

    @ISA = qw(Exporter Sbuild::Base);

    @EXPORT = qw();
}

sub new {
    my $class = shift;
    my $conf = shift;

    my $self = $class->SUPER::new($conf);
    bless($self, $class);

    $self->set('SETUP', 0);

    return $self;
}

sub setup {
    my $self = shift;

    if (!$self->get('SETUP')) {
	my $host = Sbuild::ChrootRoot->new($self->get('Config'));
	$host->begin_session();
	$host->set('Log Stream', $self->get('Log Stream'));
	$self->set('Host', $host);
	$self->set('SETUP', 1);
    }
}

sub get_query {
    my $self = shift;

    my @command = (@{$self->get_conf('WANNA_BUILD_SSH_CMD')}, 'wanna-build');
    if ($self->get_conf('WANNA_BUILD_DB_NAME')) {
	push(@command, "--database=" . $self->get_conf('WANNA_BUILD_DB_NAME'));
    } else {
        if ($self->get_conf('BUILT_ARCHITECTURE')) {
            push(@command, "--arch=" . $self->get_conf('BUILT_ARCHITECTURE'));
        }
        if ($self->get_conf('DIST_NAME')) {
            push(@command, "--dist=" . $self->get_conf('DIST_NAME'));
        }
    }
    push(@command, "--user=" . $self->get_conf('WANNA_BUILD_DB_USER'))
	if $self->get_conf('WANNA_BUILD_DB_USER');
    push(@command, @_);

    return @command;
}

sub run_query {
    my $self = shift;

    my @command = $self->get_query(@_);

    $self->setup();

    my $pipe = $self->get('Host')->run_command(
	{ COMMAND => [@command],
	  USER => $self->get_conf('USERNAME'),
	  PRIORITY => 0,
	});
}

sub pipe_query {
    my $self = shift;

    my @command = $self->get_query(@_);

    $self->setup();

    my $pipe = $self->get('Host')->pipe_command(
	{ COMMAND => [@command],
	  USER => $self->get_conf('USERNAME'),
	  PRIORITY => 0,
          DIR => getcwd(),
          STREAMERR => \*STDOUT,
	});

    return $pipe;
}

sub pipe_query_out {
    my $self = shift;

    my @command = $self->get_query(@_);

    $self->setup();

    my $pipe = $self->get('Host')->pipe_command(
	{ COMMAND => [@command],
	  USER => $self->get_conf('USERNAME'),
	  PIPE => 'out',
	  STREAMOUT => $devnull,
	  PRIORITY => 0,
	});

    return $pipe;
}

1;
