#!/usr/bin/perl
use strict; use warnings;
use utf8;

use Gtk2 '-init'; # Gtk2 laden
use vars qw($VAR1);
use AmazonCache; # Cache laden
my $cache = $VAR1;

my $rmw = Gtk2::Window->new; # Neues progammfenster
$rmw->set_title('ネイのMangabrowser');

$rmw->signal_connect(
	destroy => sub { # "x" Button verbinden
		Gtk2->main_quit;
	}
);
my $mw = Gtk2::ScrolledWindow->new;


my $treestore = Gtk2::TreeStore->new( # Speicher anlegen
	'Glib::String', # Titel
	'Glib::String', # Autor
	'Glib::String', # ISBN
	'Glib::Boolean', # Besitz
	'Glib::String', # Titel Sortiert
);

my %cats;

############## Amazon Cache verarbeiten ###############

for my $item (@$cache) {
	my $cat = $item->{'Title'};
	for ($cat) { s/^\s*//; s/\b(Vol|Bd)\..*//; s/\b(Volume|Vector|Band)\b.*//; s/[-:,(].*//; s/\W+\d.*//; s/\W//g; s/(?<=\W)\s*//; $_=lc; y///cs; }
	my $iter;
	unless (exists $cats{$cat}) {
		$iter = $cats{$cat} = $treestore->append(undef);
	}
	else {
		$iter = $treestore->append($cats{$cat});
	}
	my $sort = $item->{'Title'};
	for ($sort) { s/^\s*//; s/\b(Vol|Bd)\.//; s/\b(Volume|Vector|Band)\b//; y/ /_/; s/\W//g; y/_/ /; s/(\d+)/sprintf('%09d',$1)/ge; s/(?<=\W)\s*//; s/\s*$//; $_=lc; y/0-9//cs; }
	$treestore->set(
		$iter,
		0 => $item->{'Title'},
		1 => "@{$item->{Authors}}",
		2 => $item->{'ASIN'},
		3 => 0,
		4 => $sort,
	);
}

=comment
	my $iter = $treestore->append(undef); # (*)
	$treestore->set( # Daten einfügen
		$iter,
		0 => 'Das ist ein Test',
		1 => 'hallo',
		2 => 1
	);
	$treestore->set(
		$treestore->append(undef),
		0 => 'nusse',
		1 => 'hudel',
		2 => 0
	);
	$treestore->set(
		$treestore->append($iter), # Daten als unterpunkt von $iter(*) einfügen
		0 => 'kind',
		1 => 'hans',
		2 => 1
	);
=cut


my $treeview = Gtk2::TreeView->new($treestore); # Baumansicht

my $render = Gtk2::CellRendererText->new; # Spalte als Text darstellen
$_ = -1;
my $col;
$treeview->append_column(
	$col = Gtk2::TreeViewColumn->new_with_attributes(
		'Titel', # Überschrift
		$render, # Darstellungsart
		text => ++$_ # Inhalt der Darstellungsart
	)
); # ausführen
$col->set_sort_column_id(4);
$col->set_expand(1);
$treeview->append_column(
	$col = Gtk2::TreeViewColumn->new_with_attributes(
		'Autor',
		$render,
		text => ++$_
	)
);
$col->set_sort_column_id($_);
$treeview->append_column(
	$col = Gtk2::TreeViewColumn->new_with_attributes(
		'ISBN',
		$render,
		text => ++$_
	)
);
$col->set_sort_column_id($_);
$render->set(
	editable => 1
);
$render = Gtk2::CellRendererToggle->new; # Checkboxen
$treeview->append_column(
	$col = Gtk2::TreeViewColumn->new_with_attributes(
		'Besitz',
		$render,
		active => ++$_
	)
);
$col->set_sort_column_id($_);


$treeview->signal_connect(
	'row-activated' => sub {
		print join '<<', @_;
	}, 'hallo'
);


$mw->add($treeview); # Baumansicht ans Hauptfenster anfügen
$rmw->add($mw);

$rmw->show_all; # Fenster anzeigen

$|++;
Gtk2->main; # Programm starten

