package DTL::Fast::Tag::BlockSuper;
use strict; use utf8; use warnings FATAL => 'all'; 
use parent 'DTL::Fast::Tag::Simple';  

$DTL::Fast::TAG_HANDLERS{'block_super'} = __PACKAGE__;

#@Override
sub render
{
    my( $self, $context ) = @_;
    my $result = '';
    
    my $ns = $context->{'ns'}->[-1];
    
    if (    # there is an inheritance and we are in block
        my $descendants = $ns->{'_dtl_descendants'}
        and exists $ns->{'_dtl_rendering_block'}
    ) 
    {
        my $current_template = $ns->{'_dtl_rendering_template'};
        my $current_block_name = $ns->{'_dtl_rendering_block'}->{'block_name'};
        
        for( my $i = 0; $i < scalar @$descendants; $i++ )
        {
            if ( $descendants->[$i] == $current_template ) # found self
            {    
                for( my $j = $i + 1; $j < scalar @$descendants; $j++ )
                {
                    if ( $descendants->[$j]->{'blocks'}->{$current_block_name} ) # found parent block
                    {
                        $context->push_scope();
                        $ns->{'_dtl_rendering_template'} = $descendants->[$j];
                        $ns->{'_dtl_rendering_block'} = $descendants->[$j]->{'blocks'}->{$current_block_name};
                        
                        $result = $descendants->[$j]->{'blocks'}->{$current_block_name}->SUPER::render($context);
                        
                        $context->pop_scope();
                        last;
                    }
                    
                }
                last;
            }
            
        }
    }
 
    return $result;
}

1;