#!/usr/bin/perl

use strict;
use warnings;
use open ':std', ':encoding(UTF-8)';

use JSON::XS;
use FileHandle;
use Text::CSV::Easy(qw/csv_build csv_parse/);

use lib '/app/tools/common/lib';
use Common::Session;

eval {
    my $sql = (
        qq{
SELECT 
	c.table_name,
    c.column_name,
	c.data_type
FROM 
    information_schema.columns c
WHERE 1
	AND c.data_type REGEXP '.*int.*'
	AND c.table_schema = ?
	AND c.table_name = ?
}
    );

    my $sql2 = (
        qq{
SELECT
	t.table_name
FROM
	information_schema.tables t
WHERE
	t.table_schema=?
}
    );

    my $byte_sz = {
        'bigint'    => 8,
        'int'       => 4,
        'mediumint' => 3,
        'smallint'  => 2,
        'tinyint'   => 1,
    };

    my $dbx = Common::Session::getdbx('report01');
    my $tabs;
    map { $tabs->{ $_->tablename }++ } $dbx->resultset('Report::DDbTable')->search( { 'analyze_sz' => 1 } )->all;

    my $clients = Common::Session::getclients;

    foreach my $host ( sort keys %{ $clients->by_host } ) {
        my $dbh = Common::Session::getdbh($host);

        foreach my $client ( @{ $clients->by_host->{$host} } ) {
            my $dbname = $client->dbname;
            my $dbtabs;
            map { $dbtabs->{$_}++ } @{ $dbh->selectcol_arrayref( $sql2, undef, $dbname ) };

            $dbh->do("USE $dbname");

            foreach my $tab ( sort keys %{$tabs} ) {
                next unless exists $dbtabs->{$tab};

                my $cnt = ( $dbh->selectrow_array("SELECT COUNT(*) FROM $tab") )[0];
                next unless $cnt;

                my $rows = $dbh->selectall_arrayref( $sql, undef, ( $dbname, $tab ) );
                if ( defined $rows and scalar @{$rows} ) {
                    foreach my $row ( @{$rows} ) {
                        my ( $tbl, $col, $int ) = @{$row};
                        my $bsz  = $cnt * $byte_sz->{$int};
                        my $max  = ( $dbh->selectrow_array("SELECT MAX($col) FROM $tbl") )[0];
                        my $line = csv_build( ( $host, $dbname, $tbl, $col, $int, $max, $bsz ) );
                        print "$line\n";
                    }
                }
            }
        }
    }
};
if ($@) {
    logMessage( 'error', $@ );
}


sub recommended_sz {
	my $data = shift;
}
