package DBIx::dbMan::Extension::SimpleMacros;

use strict;
use base 'DBIx::dbMan::Extension';

our $VERSION = '0.01';

1;

sub IDENTIFICATION { return "000001-000084-000001"; }

sub preference { return 4500; }

sub known_actions { return [ qw/COMMAND/ ]; }

sub handle_action {
	my ($obj,%action) = @_;

	$action{processed} = 1;
	if ($action{action} eq 'COMMAND') {
		my @macros = @{$obj->{-mempool}->get('macros')};
		if (@macros) {
			my $cmd = $action{cmd};
			unless ($cmd =~ /^undef(ine)?(\s+macro)?\s+/i) {
				++$action{macro_was}->{$cmd};
				my $changes = 0;
				for my $macro (@macros) {
					my $code = "++\$changes if \$cmd =~ $macro;";
					eval $code;
				}
				$action{cmd} = $cmd;
				if ($changes) {
					if (exists $action{macro_was}->{$cmd}) {
						$action{action} = 'OUTPUT';
						$action{output} = "Deep recursion in macro language detected.\n";
					} else {
						delete $action{processed};
					}
				}
			}
		}
	}

	return %action;
}