#!/usr/bin/perl

use strict;
use warnings;

use utf8;

use open qw/:std :encoding(UTF-8)/;

use Net::INET6Glue::INET_is_INET6;
use Yandex::Passport;
use JSON;
use File::Slurp;

our $STATE_DIR = "/var/lib/dt-passport-login-creator-for-autotests";
our $STATE_FILE = "$STATE_DIR/create_login_next_num";
$Yandex::Passport::SERVICE_NAME_IN_PASSPORT = "slova";

run() unless caller();

sub run {
    open(STDERR, '>&', \*STDOUT) or die "Can't dup STDERR: $!";
    if (!-d $STATE_DIR) {
        mkdir $STATE_DIR;
    }
    if (!-f $STATE_FILE) {
        write_file($STATE_FILE, "1");
        chmod 0666, $STATE_FILE if $> == 0;
    }
    my $workers = 1;    # если воркеров больше одного, нужно синхронизировать чтение/запись $STATE_FILE. Или сделать ретраи в случае, если логины уже существуют
    my @cmd=(($>==0 ? qw/chpst -u ppc/ : ()), 'starman', '--listen', '127.0.0.1:7078', '--workers', $workers, __FILE__);
    exec @cmd;
}

my @password_symbols = ('A'..'Z', 'a'..'z', 0..9);
my $app = sub {
    select STDERR; $| = 1;
    select STDOUT; $| = 1;
    my $i = read_file($STATE_FILE);
    my $login="direct-at-tmp-".($i++);
    print STDERR "trying to create user $login\n";
    write_file($STATE_FILE, $i);

    # после создания логин не используется, пароли не запоминаем
    my $password = ""; $password .= $password_symbols[ int(rand($#password_symbols + 1)) ] for (1..20);
    my $res = Yandex::Passport::unified_passport_call(
   	create_passport_login => {
           login => $login,
           password => $password,
           firstname => 'aaa',
           lastname => 'aaa',
           language => 'ru',
           country => 'RU',
       }
    );
    print STDERR 'passport response: ' . to_json($res) . "\n";
    if ($res->{status} eq "error") {
        return [200,
                ["Content-Type" => "application/json"],
                [to_json({ errors => $res->{errors} })]
               ];
    } else {
        return [200,
                ["Content-Type" => "application/json"],
                [to_json({ login => $login, uid => $res->{uid} })]
               ];
    }
};
