package H1::ZTEDSLAM;
use Moose;

with 'H1::ZTE';

sub connect {
	my ( $self, $ip ) = @_;

	my $t = Net::Telnet->new( Timeout => 10, Prompt => '/#/' );

	$t->dump_log('/tmp/log') if $ENV{DEBUG};

	$t->open( $ip );

	$t->print("");
	$t->waitfor('/Login:/');
	$t->print('admin');
	$t->waitfor('/Password:/');
	$t->print('admin');
	$t->waitfor('/>/');
	$t->print('en');
	$t->waitfor('/Please input password:/');
	$t->print('admin');
	$t->waitfor('/#/');

	warn "login OK";

	return $t;
}


sub parse {
	my ( $self, $out ) = @_;

	my $hash;
	foreach my $line ( split(/[\n\r]+/, $out) ) {
		warn "# $line\n" if $ENV{DEBUG};
		if ( $line =~ m/^(\S+.*?)\s*:\s+(\S+.*)$/ ) {
			my ($n,$v) = ($1,$2);
			$n =~ s/\(.+\)//;
			$hash->{$n} = $v;
			warn "## $n = $v\n" if $ENV{DEBUG};
		}

	}

	return $hash;
}

sub commands {{
	'show interface %s' => [ qw(
AdminStatus
LinkStatus
LastLinkUpTime
	)],
	'show adsl status %s' => [ qw(
LineConfProfile
	)],
	'show adsl physical %s' => [ qw(
AtucCurrSnrMgn
AtucCurrAtn
AtucCurrStatus
AtucOutputPwr
AtucAttainableRate
AtucDMTState
AtucPrevSnrMgn
AturCurrAtn
AturCurrStatus
AturCurrOutputPwr
AturAttainableRate
AturDMTState
	)],
}}

sub custom {
	my ($self,$port) = @_;

	my $out = $self->command_out("show interface $port adsl-status");
	my @lines = split(/\s*[\n\r]+/,$out);

	shift @lines if $lines[0] =~ m/adsl-status/; # skip command
	if ( $lines[2] !~ m/^-+$/ ) {
		warn "Can't parse into table - missing header separator at index 2: $lines[2]";
		return;
	}
	my @h1 = split(/\s+/, $lines[0]);
	my @h2 = split(/\s+/, $lines[1]);
	my @v  = split(/\s+/, $lines[3]);

	my $hash;
	foreach my $i ( 0 .. $#v ) {
		my $k = $h1[$i];

		$h2[$i] =~ s/\(\w\)\s*$//; # remove unit

		if ( $h2[$i] =~ m/\// && $v[$i] =~ m/\// ) {
			my ($ln,$rn) = split(/\//, $h2[$i]);
			my ($lv,$rv) = split(/\//, $v[$i]);
			$hash->{ join('_',$k,$ln) } = $lv;
			$hash->{ join('_',$k,$rn) } = $rv;
		} else {
			$hash->{ $h2[$i] ? $h1[$i] .'_'. $h2[$i] : $h1[$i] } = $v[$i];
		}
	}

	return $hash;
}

1;

