#!/usr/bin/perl
# $1 tif
# $2 out pto

use strict;
use Panotools::Script;
use Image::Size;
use Math::Trig;

my $img = $ARGV[0];
my $pto = $ARGV[1];

system('convert', "$img", '-gravity', 'East', '-crop', '50x100%+0+0', '-blur', '2', "tmp_${img}_r.tif") == 0 or die "convert failed on right image";
system('convert', "$img", '-gravity', 'West', '-crop', '50x100%+0+0', '-blur', '2', "tmp_${img}_l.tif") == 0 or die "convert failed on left image";
system('exiftool', '-overwrite_original', '-tagsFromFile', "$img", "tmp_${img}_r.tif");
system('exiftool', '-overwrite_original', '-tagsFromFile', "$img", "tmp_${img}_l.tif");

system('align_image_stack', '-v', '--corr=0.6', '-t', '6','-p', $pto, '-x', '-s', '4', '-P', "tmp_${img}_r.tif", "tmp_${img}_l.tif") == 0 or die "align_image_stack failed";

my $p = new Panotools::Script;

$p->Read($pto);

my ($w, $h) = imgsize($img);

my $half_w = $p->Image->[0]{w};

foreach my $i (@{$p->Image}) {
	$i->{w} = $w;
	$i->{n} = "\"$img\"";
}

$p->Image->[0]{v} = rad2deg(atan(tan(deg2rad($p->Image->[0]{v} / 2)) * 2)) * 2;

$p->Image->[0]{TrX} = - tan(deg2rad($p->Image->[0]{v} / 2)) * 0.5;
$p->Image->[0]{r} = - $p->Image->[1]{r} / 2.0;


#$p->Image->[1]{TrX} = $p->Image->[1]{TrX} + tan(deg2rad($p->Image->[1]{v} / 2)) * 0.5;


foreach my $pt (@{$p->Control}) {
	my $x = $pt->{x};
	$pt->{x} = $half_w + $x;
}

$p->Option->{outputStacksMinOverlap} = 0.01;

$p->Variable->{0}{b} = 1;

$p->Write($pto);

print STDERR "Optimizing again\n";
system('autooptimiser', '-n', '-o', "$pto.tmp", $pto);
system('pano_modify', '--crop=AUTOHDR', '--output-exposure=AUTO', '-o', $pto, "$pto.tmp");



unlink("tmp_${img}_r.tif");
unlink("tmp_${img}_l.tif");
unlink("$pto.tmp");
