#!/usr/bin/perl

package Blog::Normalize::MovableType;

our $VERSION = '0.0rc1';

use strict;
use warnings;

use DateTime;
use Data::Dumper;
use DBI;

sub new{
	my($self, %opts) = @_;
	
	my $opts = \%opts; 
	
	return bless {
		database 	=> $opts->{database} || 'myDB',
		username 	=> $opts->{username} || 'doņa juanita',
		password 	=> $opts->{password} || 'PA$$WORD',
		hostname 	=> $opts->{hostname} || 'localhost',
		prefix 		=> $opts->{prefix} || 'mt_',
		port 		=> $opts->{port} || 3306,
	}, $self;
}

sub connect {
	my($self) = shift;
	
	my $dsn = qq{DBI:mysql:database=$self->{database};host=$self->{hostname};port=$self->{port};};

    $self->{dbh} = DBI->connect($dsn, $self->{username}, $self->{password}, { RaiseError => 1 });
    
    return $self;
}

sub posts {
	my($self) = shift;
	
	my $sth = $self->{dbh}->prepare(qq{
		SELECT entry_id, entry_basename, entry_authored_on, entry_title, entry_text, entry_category_id
		FROM $self->{prefix}entry
		ORDER BY entry_authored_on
	});
	
	$sth->execute;
	
	my $ret;
	
	while(my $ref = $sth->fetchrow_hashref) {
		push @{$ret}, { 
			id => $ref->{entry_id},
			title => $ref->{entry_title},
			date => $ref->{entry_authored_on},
			category => $ref->{entry_category_id},
			text => $ref->{entry_text},
			name => $ref->{entry_basename},
		},
	}

	return $ret;
	
}

sub import {
	my($self, %opts) = @_;
	
	foreach my $post(@{$opts{posts}}) {
		$self->{dbh}->do(qq{
			INSERT INTO $self->{prefix}entry (
				entry_allow_comments,
				entry_allow_pings,
				entry_atom_id,
				entry_author_id,
				entry_authored_on,
				entry_basename,
				entry_blog_id,
				entry_category_id,
				entry_class,
				entry_convert_breaks,
				entry_created_by,
				entry_created_on,
				entry_excerpt,
				entry_keywords,
				entry_meta,
				entry_modified_by,
				entry_modified_on,
				entry_pinged_urls,
				entry_status,
				entry_tangent_cache,
				entry_template_id,
				entry_text,
				entry_text_more,
				entry_title,
				entry_to_ping_urls,
				entry_week_number
			) VALUES (
				'1',
				'1',
				NULL,
				'1',
				?,
				?,
				'1',
				NULL,
				'entry',
				'richtext',
				'1',
				?,
				'',
				'',
				NULL,
				NULL,
				?,
				NULL,
				'2',
				NULL,
				NULL,
				?,
				'',
				?,
				'',
				?)}, undef,
				$post->{date},
				$post->{name},
				$post->{date},
				$post->{date},
				$post->{text},
				$post->{title},
				getYearWeek($post->{date}));
	}
}

sub getYearWeek{
	my($time) = shift;
	my($Y, $M, $D, $h, $m, $s) = $time =~ /\A(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})\z/;
	
	my $dt = DateTime->new(
		year   => $Y,
		month  => $M,
		day    => $D,
		hour   => $h,
		minute => $m,
		second => $s,
	);
	return $dt->strftime("%Y%V")
} 

1;