package XML::RSS::Private::Output::V1_0;

use strict;

use vars (qw(@ISA));

use XML::RSS::Private::Output::Base;
use XML::RSS::Private::Output::Roles::ModulesElems;

@ISA = (qw(XML::RSS::Private::Output::Roles::ModulesElems XML::RSS::Private::Output::Base));

sub _get_top_elem_about {
    my ($self, $tag, $about_sub) = @_;
    return ' rdf:about="' . $self->_encode($about_sub->()) . '"';
}

sub _out_textinput_rss_1_0_elems {
    my $self = shift;

    $self->_out_dc_elements($self->textinput());

    # Ad-hoc modules
    # TODO : Should this follow the %rdf_resources conventions of the items'
    # and channel's modules' support ?
    while (my ($url, $prefix) = each %{$self->_modules()}) {
        next if $prefix =~ /^(dc|syn|taxo)$/;
        while (my ($el, $value) = each %{$self->textinput($prefix) || {}}) {
            $self->_out_ns_tag($prefix, $el, $value);
        }
    }
}

sub _get_rdf_decl_open_tag {
    return "<rdf:RDF\n";
}

sub _calc_prefer_dc {
    return 1;
}

sub _get_first_rdf_decl_mappings {
    return (
        ["rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"],
        [undef, "http://purl.org/rss/1.0/"]
    );
}

sub _out_image_dc_elements {
    my $self = shift;
    return $self->_out_dc_elements($self->image());
}

sub _out_item_1_0_tags {
    my ($self, $item) = @_;

    $self->_out_dc_elements($item);

    # Taxonomy module
    $self->_output_taxo_topics($item);
}

sub _output_rss_middle {
    my $self = shift;

    # PICS rating - Dublin Core has not decided how to incorporate PICS ratings yet
    #$$output .= '<rss091:rating>'.$self->{channel}->{rating}.'</rss091:rating>'."\n"
    #$if $self->{channel}->{rating};

    $self->_out_copyright();

    # publication date
    $self->_out_defined_tag("dc:date", $self->_calc_dc_date());

    # external CDF URL
    #$output .= '<rss091:docs>'.$self->{channel}->{docs}.'</rss091:docs>'."\n"
    #if $self->{channel}->{docs};

    $self->_out_editors;

    $self->_out_all_modules_elems;

    $self->_out_seq_items();

    if ($self->_is_image_defined()) {
        $self->_out('<image rdf:resource="' .
            $self->_encode($self->image('url')) . "\" />\n"
        );
    }

    if (defined(my $textinput_link = $self->textinput('link'))) {
        $self->_out('<textinput rdf:resource="'
          . $self->_encode($textinput_link) . "\" />\n"
        );
    }

    $self->_end_channel;

    $self->_output_main_elements;
}

sub _get_end_tag {
    return "rdf:RDF";
}

1;

