#!/usr/bin/perl

=encoding UTF-8
=cut

=head1 DESCRIPTION

Скрипт выгружает данные по странам из геобазы и сохраняет их в файл.
(дальше данные из этого файла используется в api анкеты)

=cut

# common modules
use strict;
use warnings FATAL => 'all';
use feature 'say';
use utf8;
use open qw(:std :utf8);

use Carp;
use File::Slurp;
use JSON::PP;
use HTTP::Tiny;
use Encode;

# global vars

# subs
sub to_pretty_json {
    my ($data) = @_;

    my $json_coder = JSON::PP
        ->new
        ->pretty
        ->canonical
        ->indent_length(4)
        ;

    my $pretty_json = $json_coder->encode($data);

    return $pretty_json;
}

sub get_tr_name {
    my ($country_id) = @_;

    my $url = "http://geobase.qloud.yandex.ru/v1/linguistics_for_region?id=$country_id&lang=tr";
    my $output = `curl --silent '$url'`;
    my $data = decode_json encode_utf8 $output;

    return $data->{nominative_case};
}

# main
sub main {

    my $output = `curl --silent 'http://geobase.qloud.yandex.ru/v1/regions_by_type?type=3'`;
    my $data = decode_json encode_utf8 $output;

    my $result = [];

    # Это очень маленький набор стан с которыми мы можем работать. Нужно расширить этот список.
    my %allowed_country_ids = map {$_ => 1} qw(
        225
        187
        159
        149

        124
        96
    );

    foreach my $el (@{$data}) {
        push @{$result}, {
            country_id => $el->{id},
            can_work => ($allowed_country_ids{$el->{id}} ? JSON::PP::true : JSON::PP::false),
            name => {
                ru => $el->{name},
                en => $el->{en_name},
                tr => get_tr_name($el->{id}),
            }
        };
    }

    say to_pretty_json $result;

}
main();
__END__
