#!/usr/local/bin/perl

use strict;
use Test;

BEGIN { plan tests => 4 };

use Mail::vpopmail;

ok(1); # loaded module!

my $HAVE_DBI;
eval { require DBI; $HAVE_DBI=1; };

my $vchkpw;
my $vpopdir = (getpwnam('vpopmail'))[7];

if(-d $vpopdir){
    warn "# found vpopmail dir: $vpopdir\n";
    ok(1);
}else{
    warn "# no vpopmail home dir found - is vpopmail installed ??\n";
    skip(3);
    exit;
}

if(open(MYSQL, "${vpopdir}/etc/vpopmail.mysql") && $HAVE_DBI){
    chop(my $input=<MYSQL>);
    my ($hostname,$dbport,$dbun,$dbpw,$dbname) = split(/\|/, $input);
    close MYSQL;
    
    warn "# setting up for mysql as per $vpopdir/etc/vpopmail.mysql\n";

    my $dsn = "DBI:mysql:hostname=${hostname};database=${dbname}";
    $dsn .= ";port=$dbport" if($dbport);
    $vchkpw = Mail::vpopmail->new(cache => 0, debug => 0,
                                  auth_module => 'sql',
                                  dsn => $dsn, dbun => $dbun, dbpw => $dbpw);
}else{
    # check a few domains in assign for a vpasswd.
    open(ASSIGN, "/var/qmail/users/assign") || die "cannot open /var/qmail/users/assign: $!\n";
    my $i = 0;
    my $found = 0;
    while(<ASSIGN>){
        last if($i == 20);
        if(/^[^:]+:[^:]+:\d+:\d+:([^:]+):-:/){
            my $dir = $1;
            if(-f "${dir}/vpasswd"){
                $found = 1;
                last;
            }
            $i++;
        }
    }
    close ASSIGN;

    if($found){
        warn "# setting up for CDB auth\n";
        $vchkpw = Mail::vpopmail->new(cache => 0, debug => 0);
    }else{
        # must be SQL auth
        if($HAVE_DBI){
            warn "# no vpasswd files found: assuming for SQL setup.\n";
            # must get connect syntax
            print "enter SQL driver (mysql|Sybase|...) [ldap]: ";
            chop(my $driver=<STDIN>);
            $driver = 'ldap' unless($driver);
            print "enter SQL hostname [localhost]: ";
            chop(my $hostname=<STDIN>);
            $hostname='localhost' unless($hostname);
            print "enter SQL database name [vpopmail]: ";
            chop(my $dbname=<STDIN>);
            $dbname='vpopmail' unless($dbname);
            print "enter SQL username [vpopmailuser]: ";
            chop(my $dbun=<STDIN>);
            $dbun='vpopmailuser' unless($dbun);
            print "enter SQL password [vpoppasswd]: ";
            chop(my $dbpw=<STDIN>);
            $dbpw='vpoppasswd' unless($dbpw);
        
            $vchkpw = Mail::vpopmail->new(cache => 0, debug => 0,
                                          auth_module => 'sql',
                                          dsn => "DBI:${driver}:hostname=${hostname};database=${dbname}",
                                          dbun => $dbun, dbpw => $dbpw);
        }else{
            warn "# appears SQL auth_module in use, but can't find DBI.\n";
        }
    }
}
ok( $vchkpw );

my $dir = $vchkpw->userinfo(email => 'username@example.com', field => 'dir');
ok( -d $dir );
