#!/usr/local/bin/perl -w
###########################################
# rotate-server
# Mike Schilli, 2012 (m@perlmeister.com)
###########################################
use strict;
use Thrift::Socket;
use Thrift::Server;

use lib 'gen-perl';
use image_process::Rotator;

###########################################
package RotateHandler;
###########################################
use base qw(image_process::RotatorIf);
use Sysadm::Install qw(slurp blurt tap);
use File::Temp qw(tempfile);

###########################################
sub new {
###########################################
  my( $class ) = @_;

  return bless {}, $class;
}

###########################################
sub rotate {
###########################################
  my ( $self, $rotation ) = @_;

  my ( $fh1, $infile ) =
    tempfile( UNLINK => 1 );
  my ( $fh2, $outfile ) =
    tempfile( UNLINK => 1 );

  blurt $rotation->{image}, $infile;
  my ( $stdout, $stderr, $rc ) =
    tap "convert", "-rotate",
    $rotation->{angle}, $infile, $outfile;

  if ( $rc != 0 ) {
    my $x = image_process::Failed->new();
    $x->why($stderr);
    die $x;
  }

  return slurp $outfile;
}

###########################################
package main;
###########################################
use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init($DEBUG);

my $port    = 9001;
my $handler = RotateHandler->new();
my $processor =
  image_process::RotatorProcessor->new(
  $handler);
my $serversocket =
  Thrift::ServerSocket->new($port);
my $forkingserver =
  Thrift::ForkingServer->new( $processor,
  $serversocket );

DEBUG "Server starting on port $port";
$forkingserver->serve();
