# To build actual objects/Config.pm from this file run
# `make' at the top level
###############################################################################
package XAO::DO::Config;
use strict;
use XAO::Utils;
use XAO::Objects;
use base XAO::Objects->load(objname => 'Config', baseobj => 1);

my %data = (
    base_url => '<%BASE_URL%>',

    ##
    # Some auto-executed objects
    #
    auto_before => [
        'Web::Clipboard'     => {
            mode    => 'set',
            name    => 'auto_set_value',
            value   => 'This value gets set in Config.pm',
        },
    ],

    ##
    # This defines prefix mapping if you need any.
    #
    path_mapping_table  => {
        '/mapped'       => [ 'Page', path => '/bits/mapped-template' ],
    },
);

###############################################################################

sub init {
    my $self=shift;

    $self->embedded('hash')->fill(\%data);

    ##
    # This is required for most database driven sites. Once database
    # config is "embedded" it provides some useful methods like "odb" to
    # get to the database handle.
    #
    # For sites that use non-XAO::FS database layer this can also
    # connect to some other database and provide a $dbh for instance.
    #
    # Sample site does not use database, so we comment this out.
    #
    ###my $fsconfig=XAO::Objects->new(
    ###    objname     => 'FS::Config',
    ###    odb_args    => {
    ###        dsn       => '<%ODB_DSN%>',
    ###        user      => '<%ODB_USER%>',
    ###        password  => '<%ODB_PASSWORD%>',
    ###    },
    ###);
    ###$self->embed(fs => $fsconfig);

    $self->SUPER::init();
}

###############################################################################

# This should define database structure for XAO::FS based sites.

sub build_structure ($) {
    my $self=shift;

    my %structure = (
        Foos => {
            type        => 'list',
            class       => 'Data::Foo',
            key         => 'foo_id',
            structure   => {
                Bars => {
                    type        => 'list',
                    class       => 'Data::FooBar',
                    key         => 'bar_id',
                    key_format  => '<$AUTOINC$>',
                    structure   => {
                        name => {
                            type        => 'text',
                            maxlength   => 100,
                            index       => 1,
                        },
                    },
                },
                amount => {
                    type        => 'integer',
                    minvalue    => 0,
                },
            },
        },
    );

    $self->odb->fetch('/')->build_structure(\%structure);

    ##
    # Sites that use XAO::Content for semi-static content management
    # shall add this:
    #
    ### XAO::Objects->new(objname => 'Web::Content')->build_structure;
}

###############################################################################
1;
# vim: ft=perl:
