#!/usr/bin/perl

use Modern::Perl;
use DateTime::TimeZone;
use Test::Exception;
use Test::MockModule;
use Test::More;

BEGIN { use_ok('Koha::DateTime::Format::SQL'); }

my $local_timezone   = DateTime::TimeZone->new( name => 'local' );
my $koha_config_mock = Test::MockModule->new('Koha::Config');
my $config           = { timezone => '' };
$koha_config_mock->mock( 'get', sub { $config->{ $_[1] } } );

subtest 'normal datetime, no timezone configured' => sub {
    plan tests => 7;

    $config->{timezone} = '';
    $Koha::DateTime::Format::SQL::timezone = undef;

    my $dt = Koha::DateTime::Format::SQL->parse_datetime('2024-01-02 10:11:12');

    is( $dt->year,            2024 );
    is( $dt->month,           1 );
    is( $dt->day,             2 );
    is( $dt->hour,            10 );
    is( $dt->minute,          11 );
    is( $dt->second,          12 );
    is( $dt->time_zone->name, $local_timezone->name );
};

subtest 'normal datetime, with timezone configured' => sub {
    plan tests => 7;

    $config->{timezone} = 'Pacific/Auckland';
    $Koha::DateTime::Format::SQL::timezone = undef;

    my $dt = Koha::DateTime::Format::SQL->parse_datetime('2024-01-02 10:11:12');

    is( $dt->year,            2024 );
    is( $dt->month,           1 );
    is( $dt->day,             2 );
    is( $dt->hour,            10 );
    is( $dt->minute,          11 );
    is( $dt->second,          12 );
    is( $dt->time_zone->name, 'Pacific/Auckland' );
};

subtest 'infinite datetime, no timezone configured' => sub {
    plan tests => 7;

    $config->{timezone} = '';
    $Koha::DateTime::Format::SQL::timezone = undef;

    my $dt = Koha::DateTime::Format::SQL->parse_datetime('9999-01-02 10:11:12');

    is( $dt->year,            9999 );
    is( $dt->month,           1 );
    is( $dt->day,             2 );
    is( $dt->hour,            10 );
    is( $dt->minute,          11 );
    is( $dt->second,          12 );
    is( $dt->time_zone->name, 'floating' );
};

subtest 'normal datetime, with timezone configured' => sub {
    plan tests => 7;

    $config->{timezone} = 'Pacific/Auckland';
    $Koha::DateTime::Format::SQL::timezone = undef;

    my $dt = Koha::DateTime::Format::SQL->parse_datetime('9999-01-02 10:11:12');

    is( $dt->year,            9999 );
    is( $dt->month,           1 );
    is( $dt->day,             2 );
    is( $dt->hour,            10 );
    is( $dt->minute,          11 );
    is( $dt->second,          12 );
    is( $dt->time_zone->name, 'floating' );
};

done_testing;
