#!/usr/bin/perl

use strict;
use warnings;

use DBI;
use Flickr::API;
use XML::LibXML;

use Compress::Zlib; # boggle

# flickr initialisation
my $key    = 'c0541c9d4fc19d7e829d940b693b0553';
my $secret = '89f28baaebe79b56';

my $api = new Flickr::API({'key'    => $key, 'secret' => $secret});

my $user_id = shift || "48600109393@N01";

# dbi initialisation
my $dbh = DBI->connect("dbi:SQLite:dbname=$ENV{'HOME'}/Desktop/flickr-public-groups.db");
db_create($dbh);

my @groups = get_all_group_ids($user_id);






### Flickr

sub get_all_group_ids {
  my ($group_ids, $pages) = get_group_ids($user_id, 1);

  foreach my $page (2..$pages) {
    push @{ $group_ids }, @{ get_group_ids($user_id, $page) };
  }
  
  return ($group_ids);
}

sub get_group_ids {
  my $user_id = shift || die "No user ID";
  my $page    = shift || 1;

  my $photo_ids = {};
  my $info = get_flickr_data('flickr.groups.pools.getGroups',
                             { 'user_id'  => $user_id,
                               'per_page' => 400,
                               'page'     => $page,
                             });

  my $nodes = $info->findnodes('/rsp/groupss');
  my $pages = $nodes->[0]->findvalue('@pages');

  print "  Got page $page (of $pages) of groups\n";

  my $group_nodes = $info->findnodes('//group');
  foreach my $group_node (@{ $group_nodes }) {

  #   <groups page="1" pages="1" per_page="400" total="3">
  #     <group nsid="33853651696@N01" name="Art and Literature Hoedown"
  #       admin="0" privacy="3" groups="2" iconserver="1" /> 
  #     <group nsid="34427465446@N01" name="FlickrIdeas"
  #       admin="1" privacy="3" groups="20" iconserver="1" /> 
  #   </groups>

    my $nsid = $group_node->getAttribute('nsid');
    $group_ids->{$id}{'nsid'} = $id;
    $group_ids->{$id}{'owner'} = $user_id;

    foreach my $attr (get_meta_fields()) {
      $group_ids->{$id}{$attr} = $group_node->getAttribute($attr);
    }
  }
  
  return ($group_ids, $pages);
}


  # flickr.groups.pools.getGroups;




}


### Database

sub db_create {
  my $dbh = shift;  
  
  my $create = <<EOC;
  create table if not exists
               groups (id INTEGER PRIMARY KEY AUTOINCREMENT,
                       group_id TEXT,
                       name TEXT,
                       admin INTEGER,
                       privacy INTEGER,
                       photos INTEGER,
                       iconserver INTEGER,
                      );

               photos (id INTEGER PRIMARY KEY AUTOINCREMENT,
                       group_id TEXT,
                       photo_id INTEGER,
                       farm TEXT,
                       secret TEXT,
                       title TEXT,
                       owner TEXT,
                       server TEXT,
                       dateadded INTEGER,
                       owner_name TEXT);
EOC
