use utf8;
use warnings; no warnings "redefine";
use strict;

use Loader qw(line_in line_printer log_update log_view);
use Fehler qw(problem report_fehler);
use Dbase::Help qw(Do DoSelect qquote DoFn);
use Dbase::Globals qw(content name_kunde);

sub edit_confitems($;$) {
	my ( $kunde, $kn ) = @_;

	$kn = "Kunde $kunde:" . name_kunde($kunde) if $kunde && !content($kn);
	my @log_kunde = ( kunde => $kunde || '-' );
	my $sql_kunde = 'kunde ' . ( $kunde ? "= $kunde" : 'IS NULL' );

	while (1) {
		content( my $act = line_in "$kn ConfItems >", 4 ) or return;
		if ( $act eq '?' ) {
			print <<_;
l   auflisten
a   hinzufügen
u   umbenennen
d   löschen
_
			next;
		}

		if ( $act eq 'l' ) {
			line_printer();
			my $hdr;
			DoSelect {
				my ($ci) = @_;
				no warnings 'once';    # Db::pr_fh
				print $Db::pr_fh "$ci\n";
			  }
			  "SELECT name FROM confitem WHERE $sql_kunde ORDER BY name"
			  or print "(leer)\n";
			next;
		}

		if ( $act eq 'H' ) {
			log_view( $kn, confitem => @log_kunde );
			next;
		}

		if ( $act eq 'a' ) {
			content( my $i = line_in('ConfItem: ') ) or next;
			if ( defined( DoFn(<<_) ) ) {
	SELECT id FROM confitem WHERE $sql_kunde AND name = ${\qquote $i}
_
				problem('Gibt es schon.');
			}
			else {
				my $id = Do(<<_);
	INSERT INTO confitem SET kunde=${\qquote($kunde)}, name=${\qquote($i)}
_
				log_update(
					confitem => @log_kunde,
					undef, 'name', '*', undef, $i
				);
			}
			next;
		}

		if ( $act eq 'u' ) {
			content( my $alt = line_in('ConfItem alt: ') ) or next;
			unless ( my $id = DoFn(<<_) ) {
	SELECT id FROM confitem WHERE $sql_kunde AND name = ${\ qquote($alt) }
_

				problem('Nicht gefunden');
			}
			elsif ( !content( my $neu = line_in('ConfItem neu: ') ) ) { }
			elsif ( defined( DoFn(<<_) ) ) {
	SELECT id FROM confitem WHERE $sql_kunde AND name = ${\ qquote($neu) }
_
				problem('Gibt es schon.');
			}
			else {
				log_update(
					confitem => @log_kunde,
					undef,
					name => undef,
					$alt
				);
				Do(<<_);
	UPDATE confitem SET name=${\ qquote($neu) } WHERE id = $id
_
			}
			next;
		}

		if ( $act eq 'd' ) {
			content( my $i = line_in('ConfItem: ') ) or next;
			if ( my $id = DoFn(<<_) ) {
	SELECT id FROM confitem WHERE $sql_kunde AND name = ${\qquote $i}
_
				log_update(
					confitem => @log_kunde,
					undef, 'name', '-', undef, $i
				);
				Do("DELETE FROM confitem WHERE id = $id");
			}
			else {
				problem('Nicht gefunden.');
			}
			next;
		}

		print "Aktion '$act' kenne ich nicht. Liste mit '?'.\n";
		next;
		fehler: report_fehler(4);
	}
}

1;
