#!perl
use strict;
use warnings;
use lib 'lib';

use Test::More;
use Test::Exception;
use Test::Warnings;

# Info functions
# https://proj.org/development/reference/functions.html#info-functions

plan tests => 9 + 8 + 10 + 6 + 1;

use Geo::LibProj::FFI qw( :all );


my ($s, $p, $i);


# proj_info

lives_and { ok $i = proj_info() } 'info';
lives_and { ok $i->major > 4 } 'info major';
lives_and { ok $i->minor >= 0 } 'info minor';
lives_and { ok $i->patch >= 0 } 'info patch';
my $version = '';
eval { $version = $i->major . '.' . $i->minor . '.' . $i->patch };
diag "PROJ $version";
lives_and { like $i->release, qr/\b\Q$version\E\b/ } 'info release';
lives_and { like $i->version, qr/^\Q$version\E\b/ } 'info version';
lives_and { like $i->searchpath, qr#\bAlien-proj\b|/proj\b# } 'info searchpath';
# These two are not publicly documented and always seem to return 0:
lives_ok { $i->paths } 'info paths';
lives_ok { $i->path_count } 'info path_count';


# proj_pj_info

$s = "proj=merc ellps=WGS84";
lives_and { ok $p = proj_create(0, $s) } 'proj_create';
SKIP: { skip "(proj_create failed)", 2 unless $p;
	lives_and { ok $i = proj_pj_info($p) } 'info';
	lives_and { is $i->id(), "merc" } 'pj_info id';
	lives_and { like $i->description(), qr/\bcoordinate op/ } 'pj_info description';
	lives_and { is $i->definition(), $s } 'pj_info definition';
	lives_and { is $i->has_inverse(), 1 } 'pj_info has_inverse';
	lives_and { is $i->accuracy(), -1 } 'pj_info accuracy';
}
lives_ok { proj_destroy($p) } 'proj_destroy';


# proj_grid_info

$s = "";
lives_and { ok $i = proj_grid_info($s) } 'grid_info';
lives_and { is $i->gridname(), $s } 'grid_info gridname';
lives_and { like $i->filename(), qr/\Q$s\E$/ } 'grid_info filename';
lives_and { is $i->format(), "missing" } 'grid_info format';
lives_and { like ref($i->lowerleft),  qr/\bPJ_COORD$/ } 'grid_info lowerleft';
lives_and { like ref($i->upperright), qr/\bPJ_COORD$/ } 'grid_info upperright';
lives_ok { $i->n_lon } 'grid_info n_lon';
lives_ok { $i->n_lat } 'grid_info n_lat';
lives_ok { $i->cs_lon } 'grid_info cs_lon';
lives_ok { $i->cs_lat } 'grid_info cs_lat';


# proj_init_info

$s = "ITRF2014";
lives_and { ok $i = proj_init_info($s) } 'init_info';
lives_and { is $i->name(), $s } 'init_info name';
lives_and { like $i->filename(), qr/\Q$s\E$/ } 'init_info filename';
lives_ok { $i->version() } 'init_info version';
lives_ok { $i->origin() } 'init_info origin';
lives_and { like $i->lastupdate(), qr/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/ } 'init_info lastupdate';


done_testing;