#!/usr/bin/perl -w

use utf8;
use strict;
use warnings;

BEGIN {
    unshift @INC, ( $ENV{POPHOME} || '@POPHOME@' ) . '/lib'
      unless $ENV{KUNDE_NO_PERLPATH};
}

use Dbase::Globals qw(content);
use Dbase::Help qw(Do DoFn DoTrans qquote);
use Loader qw(log_update);
use noris::REST::Backend qw(get_param error success);

my $auftrags_nr = get_param( integer   => 'auftrags_nr' );
my $domain      = get_param( hostname  => 'domain' );
my $reseller    = get_param( printable => 'reseller' );

# Falls etwas in der Datenbank geändert werden soll, darf success() erst nach
# Abschluss der Transaktion aufgerufen werden.
my $success;
DoTrans {

    my ( $id, $domain_kunde, $auftragsnr ) = DoFn(<<_)
	SELECT id, kunde, nserver, flags, ende
	FROM   domainkunde
	WHERE  domain = ${\ qquote($domain) }
	   AND ( ende IS NULL OR ende > UNIX_TIMESTAMP(NOW()) )
	FOR UPDATE
_
      or error(qq(Habe die Domain "$domain" in der Datenbank nicht gefunden.));

    if ( content($reseller) ) {
        $reseller =~ /([^.]*)\z/;    # Sub-Reseller, vgl. RT#406317-10
        my ($kunde_id) =
          DoFn( 'SELECT id FROM kunde WHERE name = ' . qquote($1) );
        $kunde_id =
             DoFn( "SELECT kunde FROM uucpkunde WHERE name = " . qquote($1) )
          or error(qq(Es gibt keinen Reseller "$reseller".))
          unless defined $kunde_id;

        error qq(Die Domain "$domain" gehört einem anderen Kunden.)
          if $domain_kunde != $kunde_id;
    }

    unless ( defined $auftragsnr ) {
        Do(     'UPDATE domainkunde SET auftragsnr='
              . qquote($auftrags_nr)
              . ' WHERE id='
              . $id );
        log_update( domainkunde => id => $id, undef, auftragsnr => undef, '-' );
	$success = 1;
    }
    elsif ( $auftragsnr == $auftrags_nr ) {
        success('Die Auftragsnummer war bereits registriert.');
    }
    else {
        error(  qq(Für die Domain "$domain" )
              . 'ist bereits eine andere Auftragsnummer registriert.' );
    }
};
        
success('Die Auftragsnummer wurde registriert.') if $success;
