#!/usr/bin/perl

=encoding UTF-8
=cut

=head1 DESCRIPTION

=cut

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

use Carp;

use lib::abs qw(
    ../lib/
);
use Utils;

# global vars

# subs
sub wait_until_mysql_is_working {

    my $n = 30;

    my $printed_asterix = 0;

    foreach (1..$n) {

        my $result = 0;

        eval {
            my $dbh = get_dbh('mysql');
            my $sth = $dbh->prepare('select 1');
            $sth->execute() or die $dbh->errstr;

            $result = [$sth->fetchrow_array()]->[0];
        };

        if ($result == 1) {
            print "\n" if $printed_asterix;
            return;
        } else {
            print "*";
            $printed_asterix = 1;
            sleep 1;
        }

    }

    die "Fatal Error. After $n attemts still can't access MySQL";
}

sub create_db_and_table {

    my $dbh_mysql = get_dbh('mysql');
    my $sth = $dbh_mysql->prepare('create database if not exists partner');
    $sth->execute() or die $dbh_mysql->errstr;

    my $dbh_partner = get_dbh('partner');
    $sth = $dbh_partner->prepare("
    CREATE TABLE IF NOT EXISTS `page_id_generator` (
        `page_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
        `service` VARCHAR(255) NOT NULL,
        `dt` DATETIME NOT NULL,
        `ip` VARCHAR(255),
        `user_agent` VARCHAR(1024),
        PRIMARY KEY (`page_id`)
    ) ENGINE='InnoDB' DEFAULT CHARACTER SET 'UTF8' AUTO_INCREMENT=320000;
    ");

    $sth->execute() or die $dbh_partner->errstr;

    $sth = $dbh_partner->prepare(
        'insert into page_id_generator
            (`page_id`, `service`, `dt`, `ip`, `user_agent`)
            values
            (NULL, "test", now(), "127.0.0.1", "user agent");'
    );

    $sth->execute() or die $dbh_partner->errstr;
}

# main
sub main {

    $| = 1;

    wait_until_mysql_is_working();
    create_db_and_table();

}
main();
__END__
