<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

/**
 * Purge planifiée de local_kid_journal au-delà de la durée de rétention
 * configurée (`local_kid/journalretention`, section 25 du cahier des
 * charges — voir settings.php). Aucune purge tant que la durée n'est pas
 * configurée (0/vide = désactivée), jamais "tout supprimer" par défaut.
 * Supprime par lot pour ne jamais verrouiller la table le temps d'un DELETE
 * unique sur un gros volume.
 *
 * @package local_kid
 */

namespace local_kid\task;

defined('MOODLE_INTERNAL') || die();

class journal_purge_task extends \core\task\scheduled_task {

    /** @var int Nombre de lignes supprimées par lot. */
    const BATCH_SIZE = 1000;

    public function get_name() {
        return get_string('task_journal_purge', 'local_kid');
    }

    public function execute() {
        global $DB;

        $retentionseconds = (int) get_config('local_kid', 'journalretention');
        if ($retentionseconds <= 0) {
            mtrace('local_kid: purge du journal désactivée (aucune durée de rétention configurée).');
            return;
        }

        $cutoff = time() - $retentionseconds;
        $total = 0;

        do {
            $ids = array_keys($DB->get_records_select(
                'local_kid_journal', 'timecreated < :cutoff', ['cutoff' => $cutoff], '', 'id', 0, self::BATCH_SIZE
            ));
            if (empty($ids)) {
                break;
            }
            [$insql, $inparams] = $DB->get_in_or_equal($ids);
            $DB->delete_records_select('local_kid_journal', "id $insql", $inparams);
            $total += count($ids);
        } while (count($ids) === self::BATCH_SIZE);

        mtrace("local_kid: $total entrée(s) de journal purgée(s) (antérieures au " . userdate($cutoff) . ").");
    }
}
