# Wiki Page
# =========
#
# A single page on the wiki. Can fetch and parse the page and do... stuff.

package ATITD::Wiki::Page;

use strict;
use warnings;

use HTML::TreeBuilder;
use URI;

# Creates a new page, but doesn't fetch it yet.
sub new {
	my ($class, $wiki, $name) = @_;
	my $self = bless {
		wiki => $wiki,
		name => $name,
		content => undef,
		tree => undef,
	}, $class;
	
	return $self;
}

# Our wiki.
sub wiki { $_[0]->{wiki} }

# Our name.
sub name { $_[0]->{name} }

# Our complete URL.
sub url { URI->new($_[0]->name)->abs($_[0]->wiki->url.'/') }

# Our content, if already fetched.
sub content { $_[0]->{content} }

# Our content as HTML tree, if already fetched.
sub tree { $_[0]->{tree} }

# Fetch the page.
sub fetch {
	my ($self) = @_;
	my $response = $self->wiki->ua->get($self->url);

	die "Unable to contact Wiki: ".$response->status_line
		unless $response->is_success;
	
	$self->{content} = $response->content;
	$self->{tree} = HTML::TreeBuilder->new_from_content($self->content);
	
	return $self;
}

1;
