<?php

use Core\Db;

require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'autoload.php';

/**
 * Обновить рейтинг кланов.
 * Раз в день.
 */

$add_exp_list = [];
$all_exp_list = [];
$exp_list = [];
$win_list = [];
$lose_list = [];
$nich_list = [];
$xu_list = [];
$level_list = [];
$log_list = [];

$clans = Db::getRows(
    '
select
    clan.id as cid,
    clan.level,
    clan.name,
    count(*) as ucount,
    clan.exp,
    stats.id as sid,
    sum(users.win) as win,
    sum(users.lose) as lose,
    sum(users.nich) as nich,
    aaa_clan_reting_list.global
from
    clan
        left join users on clan.id = users.clan
        left join stats on users.id = stats.id
        left join aaa_clan_reting_list on aaa_clan_reting_list.clan = clan.id
where clan.id not in (62, 93) and users.admin = 0 and users.`real` = 1
'
);

foreach ($clans as $clan) {
    $add_exp = 0;
    $add_exp_list[$clan['cid']] = 0;
    $all_exp_list[$clan['cid']] = 0;
    $log_list[$clan['cid']] = $clan['name'];
    $level_list[$clan['cid']] = $clan['level'];
    $xu_list[$clan['cid']] = $clan['ucount'];
    $exp_list[$clan['cid']] = $clan['exp'];
    $win_list[$clan['cid']] = $clan['win'];
    $lose_list[$clan['cid']] = $clan['lose'];
    $nich_list[$clan['cid']] = $clan['nich'];

    $clanMemberStats = Db::getRows(
        'select
                    stats.id,
                    repexp
                from
                    stats
                        left join users on users.id = stats.id
                where clan = ?',
        [$clan['cid']]
    );

    foreach ($clanMemberStats as $stat) {
        $add_exp += $stat['repexp'];
        Db::sql('update stats set repexp = 0 where id = ?', [$stat['id']]);
    }

    $global_exp = idate('d') != 1 ? round($clan['global']) : 0;
    if ($clan['ucount'] > 0) {
        $add_exp_list[$clan['cid']] = $add_exp; //записываем сколько опыта получил за сегодня
        $all_exp_list[$clan['cid']] = $global_exp + $add_exp; //записываем сколько опыта получил всего + сегодняшний
    }
}

arsort($all_exp_list);

$keys = array_keys($all_exp_list);

$i = 0;
foreach ($keys as $key) {
    $i++;
    if (!$key) {
        continue;
    }
    Db::sql(
        'insert into aaa_clan_reting_list (level, xu, win, lose, nich, exp_real, clan, pos, global, exp, date, time) values (?,?,?,?,?,?,?,?,?,?,?,unix_timestamp())',
        [
            $level_list[$key],
            $xu_list[$key],
            $win_list[$key],
            $lose_list[$key],
            $nich_list[$key],
            $exp_list[$key],
            $key,
            $i,
            $all_exp_list[$key],
            $add_exp_list[$key],
            date('dmY'),
        ]
    );
}

$prize = [
    1 => $xu_list[0] * 0.3,
    2 => $xu_list[1] * 0.2,
    3 => $xu_list[2] * 0.1,
];
const RATING_MSG = 'Клан %s получает %s екр. в казну клана за %s-е место в рейтинге!';

$stmt = Db::prepare('update clan set money2 = money2 + ? where id = ?');
$stmt->execute([$prize[1], $keys[0]]);
$stmt->execute([$prize[2], $keys[1]]);
$stmt->execute([$prize[3], $keys[2]]);

Db::sql(
    'insert into chat (text, city, type, new, time) values
                    (?,\'capitalcity\',6,1,unix_timestamp()),
                    (?,\'capitalcity\',6,1,unix_timestamp()),
                    (?,\'capitalcity\',6,1,unix_timestamp()),
                    (?,\'capitalcity\',6,1,unix_timestamp())',
    [
        '<span style="color: red; font-weight: bold;">Рейтинг кланов ' . date('d-m-Y') . ' </span>',
        sprintf(RATING_MSG, $log_list[0], $prize[1], 1),
        sprintf(RATING_MSG, $log_list[1], $prize[2], 2),
        sprintf(RATING_MSG, $log_list[2], $prize[3], 3),
    ]
);

Db::sql('update stats set repexp = 0 where repexp > 0');