#------------------------------------------------------------
# Copyright (C) 2010 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package Common::LandingPage;

# Landing pages are dynamic pages on the website consisting of
# various modules.  A module is a self contained form object
# designed to display in a contained space of the webpage.
#

use strict;
use warnings;

use lib '/app/tools/common/lib';
use base 'Common::FormObject';

# List of all modeule objects available for this landing page
sub _modules { die "must be overloaded" }

sub _init {
    my ( $self, %args ) = @_;

    $self->SUPER::_init(%args);

    $self->_initProperties(%args);

    return $self;
}

sub _alert { }

sub _initProperties {
    my ( $self, %args ) = @_;
    my $alert = $self->_alert();

    $self->{Alert} = $alert if ($alert);
    $self->{Modules}->{Module} = $self->_getAvailableModules(%args);
}

sub _getAvailableModules {
    my ( $self, %args ) = @_;

    my @modules = $self->_modules();

    my @availableModules;

    # First collect all the modules
    foreach my $module (@modules) {
        my $obj = $self->_getModuleObject( $module, %args );
        if ( $obj->_canView() ) {
            push( @availableModules, $obj );
        }
    }

    return $self->_sortModules( \@availableModules );
}

sub _sortModules {
    my $self    = shift;
    my $modules = shift;

    my @sorted = sort { $a <=> $b } @$modules;
    return \@sorted;
    return $modules;

}

sub _getModuleObject {
    my ( $self, $module, %args ) = @_;

    eval "require $module";
    die $@ if ($@);

    return $module->new(%args);
}

###
1;    #
###
