<?php

declare(strict_types=1);

namespace App\Repository\Contract;

use App\Entity\AuditLog;
use DateTimeImmutable;

interface AuditLogReadRepositoryInterface
{
    /**
     * @param null|list<string> $entityTypes
     * @param null|list<string> $actions
     *
     * @return list<AuditLog>
     */
    public function findByFilters(
        ?int $employeeId = null,
        ?DateTimeImmutable $from = null,
        ?DateTimeImmutable $to = null,
        ?array $entityTypes = null,
        ?array $actions = null,
        ?string $username = null,
        ?string $ip = null,
        ?string $device = null,
        ?string $employeeName = null,
        int $limit = 50,
        int $offset = 0,
    ): array;

    /**
     * @param null|list<string> $entityTypes
     * @param null|list<string> $actions
     */
    public function countByFilters(
        ?int $employeeId = null,
        ?DateTimeImmutable $from = null,
        ?DateTimeImmutable $to = null,
        ?array $entityTypes = null,
        ?array $actions = null,
        ?string $username = null,
        ?string $ip = null,
        ?string $device = null,
        ?string $employeeName = null,
    ): int;
}
