#!/usr/bin/env perl
# fit -- fit a rectangle inside a smaller one
use feature qw(say);
use open qw(:std :utf8);
use strict;
use utf8;
use warnings;
use List::Util qw(min);
use Nullroute::Lib;

sub usage {
	say for
	"Usage: $::arg0 <current-WxH> <target-WxH>",
	"",
	"In target dimensions, either W or H should be omitted.",
}

my ($current, $target) = @ARGV;
if (!$current || !$target) {
	usage();
	exit 2;
}

my ($curX, $curY) = $current =~ /^(\d+)[x:](\d+)$/;
my ($min, $tarX, $tarY) = $target =~ /^(-?)(\d+)?[x:](\d+)?$/;

if (!$curX || !$curY) {
	_die("missing source dimensions");
}

my $ratio = $curX / $curY;

printf "(source ratio %.4f)\n", $ratio;

my ($outX, $outY);

if (!$tarX && !$tarY) {
	_die("missing target dimensions");
}
elsif ($tarX && !$tarY) {
	$outX = $tarX;
	$outY = $outX / $ratio;
}
elsif (!$tarX && $tarY) {
	$outY = $tarY;
	$outX = $outY * $ratio;
}
else { # ($tarX && $tarY)
	my $tRatio = $tarX / $tarY;
	printf "(target ratio %.4f)\n", $tRatio;
	if ($tRatio > $ratio xor $min) {
		$outX = min($curX, $tarX);
		$outY = $outX / $ratio;
	}
	else {
		$outY = min($curY, $tarY);
		$outX = $outY * $ratio;
	}
}

printf "\e[1m"."%dx%d → %dx%d"."\e[m\n", $curX, $curY, $outX, $outY;

my $oRatio = int(sprintf "%d", $outX) / int(sprintf "%d", $outY);

printf "(output ratio %.4f)\n", $oRatio
	if abs($oRatio - $ratio) >= 0.01;
