<?php

declare(strict_types=1);

namespace Xentral\Modules\Log\Service;

use Xentral\Components\Database\Database;
use Xentral\Modules\Log\Exception\InvalidArgumentException;

final class DatabaseLogService
{
    /** @var Database $db */
    private $db;

    /**
     * @param Database $database
     */
    public function __construct(Database $database)
    {
        $this->db = $database;
    }

    /**
     * Deletes all log entries.
     *
     * @return int Amount of deleted log entries
     */
    public function removeAllLogs(): int
    {
        $sql = 'DELETE FROM `log` WHERE 1';

        return $this->db->fetchAffected($sql);
    }

    /**
     * Removes log entries that are older than specified amount of days.
     *
     * @param int $days
     *
     * @throws InvalidArgumentException
     *
     * @return int Amount of deleted log entries
     */
    public function removeLogsOlderThan(int $days): int
    {
        if ($days < 1) {
            throw new InvalidArgumentException('Negative days not acceptable.');
        }
        $sql = 'DELETE FROM `log` WHERE DATE_SUB(CURDATE(), INTERVAL :days DAY) >= log_time';

        return $this->db->fetchAffected($sql, ['days' => $days]);
    }
}