#!/usr/bin/perl

use warnings;
use strict;

use my_inc '../../..';

use Cwd qw/chdir/;
use File::Basename qw/basename/;
use Parallel::ForkManager;
use FindBin qw/$Bin/;

use Yandex::ListUtils;
use Yandex::Shell;
use Settings;

my $MAX_PROCESSES = 4;

system($Settings::ROOT.'/protected/maintenance/export_consts_to_js.pl') && die "Can't run export_consts_to_js.pl: $!";

chdir "$Bin/../../../data" or die "Can't chdir: $!";

my @files = 
    # сортируем по приблизительной сложности
    xsort {- scalar(/\.js/), -(-s $_)}
    # пропускаем уже пожатые файлы
    grep {basename($_) !~ /^_/}
    # экспандим shell маски
    map {glob($_)} 
qw(
css/clite.css
css/main.css
css/main_welcome.css
css/main-advanced.css
css/yandex-global-modern.css
css/yandex-global.css

js/main.js
js/clite.js
js/ajaxobject.js

block/i-translation/*.js

pages/*/*.js
pages/*/*.css
);

my $pm = new Parallel::ForkManager($MAX_PROCESSES);
my $ALL_SUCCESS = 1;
$pm->run_on_finish(
    sub {
        my ($pid, $exit_code, $ident) = @_;
        if ($exit_code) {
            $ALL_SUCCESS = 0;
            print STDERR "Error on $ident\n";
        }
    }
    );
for my $file (@files) {
    $pm->start($file) and next;
    # ulimit нужен т.к. внутри запускается java и пытается отъесть 24 ГБ виртуальной памяти, что не укладывается в наше лимит по умолчанию
    # альтернативный вариант: прокидывать через переменную окружения меньший heap size: JAVA_BIN="java -Xmx1000m"
    exec('/bin/sh', '-c', 'ulimit -v unlimited; ycssjs ' . yash_quote($file));
    die "Can't exec: $!";
}
$pm->wait_all_children;
exit 1 if !$ALL_SUCCESS;

# делим файлы _direct.ie.css и _direct.css на два.
# Метка -- правило ._________{color:red}
# для отладки на бетах аналогичное деление реализовано в Apache::DebugMergeStatic
my @files_to_split = qw/direct direct.ie/;
for my $file (@files_to_split){
    yash_system("rm $_") for glob("pages/direct/_$file-*.css"); # помогает при сборке dirty пакетов, а продакшен-сборке вроде не мешает
    yash_system(qq!sed 's/.__________{color:red}/\\n/' pages/direct/_$file.css > pages/direct/_$file.css.tmp!);
    yash_system(qq!split -d -l 1 pages/direct/_$file.css.tmp pages/direct/_$file-!);
    yash_system("mv $_ $_.css") for glob("pages/direct/_$file-*");
    yash_system("rm pages/direct/_$file.css.tmp");
}

my $ratio = (stat('pages/direct/_direct.ie-00.css'))[7] / (stat('pages/direct/_direct.ie-01.css'))[7];
print STDERR "_direct.ie-00.css/_direct.ie-01.css = $ratio";

exit 0;
